C语言实现 1 冒泡排序: int sort_bubble(int array[],int n) { int i=0,j=0; for(i;i<n-1;++i) { for(j=0;j<n-1-i;++j) { if(array[j]>array[j+1]) { array[j]=array[j]^array[j+1]; array[j+1]=array[j]^array[j+1]; array[j]=array[j]^array[j+1]; } } } return 1; } 2 快速排序: int sort_fast(int array[],int start,int end) { int temp = array[start]; int i = start , j = end; if(i<j) { while(i<j) { while(i<j&&array[j]>=temp)--j; swap(&array[i],&array[j]); while(i<j&&array[i]<=temp)++i; swap(&array[i],&array[j]); } array[i] = temp; sort_fast(array,start,j-1); sort_fast(array,j+1,end); } return 1; } int swap(int *a , int *b) { if(*a == *b)return 1; *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; return 1; } 3 折半插入排序: int sort_insert(int array[],int number) { int i = 1,j,low,high,mid,tmp; for(i;i<number;++i) { low = 0; j = high = i - 1; tmp = array[i]; while(low<=high) { mid = (low+high)/2; if(array[mid] < array[i]) { low = mid+1; } else { high = mid-1; } } while(j>=high+1) { array[j+1] = array[j]; j--; } array[high+1] = tmp; } return 1; } 4 希尔排序 int sort_shell(int array[],int number) { int i,j,tmp,gap = number/2; while(gap > 0) { for(i = gap ; i<number ; ++i) { tmp = array[i]; j = i - gap; while(j >= 0 && array[j] > tmp) { array[j + gap] = array[j]; j = j - gap; } array[j + gap] = tmp; } gap = gap / 2; } return 1; } 5 简单选择排序 int sort_choose(int array[],int number) { int i,j,pos; for(i = 0; i < number ; ++i) { pos = i; for(j = i ; j < number ; ++j) { if(array[j] < array[pos]) { pos = j; } } swap(&array[i],&array[pos]); } return 1; } int swap(int *a , int *b) { if(*a == *b)return 0; *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; return 0; } 6 堆排序 int sift(int array[],int low,int high) { int tmp,i = low,j = 2 * i; tmp = array[i]; while( j <= high) { if(j < high && array[j] < array[j+1]) j = j+1; if(array[j] > tmp) { array[i] = array[j]; i = j; j = 2*i; } else break; } array[i] = tmp; } int sort_heap(int array[],int number) { int i = number/2,tmp; for(; i >= 1; --i) { sift(array,i,number-1); } for( i = number-1; i >= 1 ; --i) { tmp = array[0]; array[0] = array[i]; array[i] = tmp; sift(array,0,i-1); } return 1; } 7 归并排序 void merge(int array[],int low,int mid,int high) { int i = low , j = mid+1 ,t = 0; int *tmp = (int *)malloc((high - low +1)*sizeof(int)); while( i <= mid && j<= high) { if(array[i] <= array[j]) { tmp[t] = array[i]; ++i; ++t; } else { tmp[t] = array[j]; ++j; ++t; } } while(j <= high) { tmp[t] = array[j]; ++t; ++j; } while(i <= mid) { tmp[t] = array[i]; ++i; ++t; } for( j=high, --t ; t >=0; --t,--j) { array[j] = tmp[t]; } free(tmp); } void merge_once(int array[],int length , int number) { int i = 0; for(i; i + 2*length - 1 < number ; i = i + 2*length) { merge(array,i,i + length -1 , i + 2 * length -1); } if( i + length -1 < number) { merge(array , i , i + length - 1 , number-1); } } int sort_merge(int array[],int number) { int length; for(length = 1;length < number ; length = 2 * length) { merge_once(array,length,number); } return 1; }