几个简单的排序 source code
//选择排序 void chooseSort(unsigned char *list, int length) { int i,j,temp,minIndex; //要遍历的次数 for(i = 0; i < length - 1; i++) { //设当前最小值序号 minIndex = i; //把序列后面的数据作比较 for(j = i + 1; j < length; j++) { if(list[minIndex] > list[j]) { minIndex = j; } } temp = list[i]; list[i] = list[minIndex]; list[minIndex] = temp; } } //冒泡排序 void bubbleSort(unsigned char *list, int length) { int i,j,temp; for(i = 0; i < length; i++) { for(j = 0; j < length - i - 1; j++) { if(list[j+1] < list[j]) { temp = list[j + 1]; list[j + 1] = list[j]; list[j] = temp; } } } } //快速排序 void quickSort(unsigned char *list, int left, int right) { if(left < right) { //递归调用quickSort int i = division(list,left,right); quickSort(list, left, i-1); quickSort(list, i+1, right); } } int division(unsigned char *list,int left,int right) { if(left>right) return -1; int base = list[left]; //任何情况下左指针比右指针要小 while(left < right) { //从右指针向左移动,找到比base要大(或等于)的值 while((left < right) && (list[right] >= base)) right -= 1; //把该值替代左指针指向的值 list[left] = list[right]; //从左指针向右移动,找到比base要小(或等于)的值 while((left < right) && (list[left] <= base)) left += 1; //把该值替代右指针的值 list[right] = list[left]; } //把base插入当前左指针指向的地方 list[left] = base; return left; }
测试后觉得 快速排序 最快。