写了个快排的模板,写了个int版的。 下了个GCC,在命令行下写C++的感觉还不错。 代码如下: #include <iostream> using namespace std; template <class T> void quick_sort(T* array,int low,int high) { if(low<high) //如果low==high,说明只有一个元素,不需要排序,即到了quick_sort返回的时候 { int i = low; int j = high; //用i,j分别标示向前向后移动的游标 T temp = array[i]; //暂存标尺元素,最后再处理,这样可以在比较过程中直接覆盖,而不造成元素值的丢失 while(i<j) //i>=j作为一趟快排结束的标志,i>=j后,所有大于temp的元素都已放在i的右边,所有小于temp的元素都已放在i的左边,i就是temp应该放的位置 { while( j>i && array[j]>temp ) //用j自右向左找到第一个比temp小的元素,用它和temp所在位置做进行交换 j--; if(i==j) //如果一直找到i还没找到,说明i右面的所有元素都比temp大,此次快排的任务完成 break; array[i] = array[j]; //交换操作 i++; while( i<j && array[i]<=temp ) //用i自左向右找到第一个比temp大的元素,用它和temp所在位置做进行交换 i++; if(i==j) //如果一直找到j还没找到,说明j左面的所有元素都比temp小,此次快排的任务完成 break; array[j] = array[i]; //交换操作 j--; } array[i] = temp; //退出循环后的i时temp应该摆放的位置,因为i左面的元素都比temp小,右边都大,且i位置元素已被移到其他位置 quick_sort(array,low,i-1); //递归调用quick_sort分别对i前和i后的子序列进行快排 quick_sort(array,i+1,high); } } void quicksort(int* array,int low,int high) { if(low<high) { int i = low; int j = high; int temp = array[i]; while(i<j) { while( j>i && array[j]>temp ) j--; if(i==j) break; array[i] = array[j]; i++; while( i<j && array[i]<=temp ) i++; if(i==j) break; array[j] = array[i]; j--; } array[i] = temp; quicksort(array,low,i-1); quicksort(array,i+1,high); } } int main() { int number[30] = {23,3,26,24,5,1,12,21,29,15,17,10,7,22,6,20,19,11,2,4,9,25,13,27,14,18,28,8,16,0}; int num[10] = {4,3,8,1,0,5,7,2,9,6}; quick_sort<int>(number,0,29); quicksort(num,0,9); for(int i = 0;i < 30;i++) cout<<number[i]<<" "; cout<<endl; for(int i = 0;i < 10;i++) cout<<num[i]<<" "; cout<<endl; }