1.BubbleSort冒泡排序 相邻的两个元素进行比较,如果前一个比后一个大,则交换。 需要考虑的是原数据是否有序。
void BubbleSort(int arr[],int nLength) { if(arr == NULL || nLength <= 0 ) return; int i; int j; int bFlag; for(i = 0;i<nLength;i++) { int bFlag = 0; for(j = 0;j<nLength-i-1;j++) { bFlag = 1; if(arr[j]>arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; bFlag = j+1; } } if(bFlag == 0) return; i = nLength -bFlag -1; } }SelectSort选择排序 每遍历一次,将最大或者最小的数放到最后或者最前。
void SelectSort(int arr[],int nLenth) { if( arr == NULL || nLenth <= 0) return; int i; int j; int nMin; for(i = 0;i<nLenth;i++) { nMin = i; for(j = i;j<nLenth;j++) { if(arr[j]<arr[nMin]) nMin = j; } if(i != nMin) { int temp = arr[i]; arr[i] = arr[nMin]; arr[nMin] = temp; } } }InsertSort插入排序 将要排序的数据分成两组,一组有序,一组无序,将无序的依此插入有序中。
void InsertSort(int arr[],int nLength) { if(arr == NULL || nLength <=0) return; int i; int j; int temp; for(i = 1;i<nLength;i++) { j = i-1; temp = arr[i]; if(arr[j]>temp && j>=0) { arr[j+1] = arr[j]; j--; } arr[j+1] = temp; } }CountSort计数排序 元素属于同一个范围内,计算小于当前元素的个数,从而确定当前元素。
void CountSort(int arr[],int nLength) { if(arr == NULL||nLength<=0) return; int nMax = arr[0]; int nMin = arr[0]; int i; for(i=0;i<nLength;i++) { if(arr[i]<nMin) { nMin = arr[i]; } if(arr[i]>nMax) { nMax = arr[i]; } } int *pCount = NULL; pCount = malloc(sizeof((int)*(nMax-nMin+1))); memset(pCount,0,sizeof(int*(nMax-nMin+1))); for(i = 0;i<nLnegth;i++) { pCount[arr[i]-nMin]++; } int j = 0; for(i = 0;i<nMax-nMin+1;i++) { while(pCount[i]!=0) { arr[j] = i + nMin; j++; pCount[i]--; } } free{pCount]; pCount = NULL; }