【算法学习】快速排序
1.算法思路:
选择一个基准点,将数组中比基准点小的值移到基准值左边,比基准值大的移到基准值右边。然后递归调用,将基准值左右两边的数组做同样操作,递归结束的条件是数组只有一个元素。
基准点归位的方法:
设一头一尾两个指针,右指针向左找比第一个基准值小的数,找到后将值赋给右指针指向的数,左指针向右找第一个比基准值大得数,找到后赋给右指针指向的数
void quicksort(int left,int right){
int i,j,t,temp; if(left>right) return; temp=a[left]; //temp中存的就是基准数 i=left; j=right+1; while(true) { while(a[++i]<tmp&&i<right);
while(a[--j]>tmp);
if(i>=j)
break; //交换 t=a[i]; a[i]=a[j]; a[j]=t; } a[left]=a[i]; a[i]=temp; quicksort(left,i-1); quicksort(i+1,right); }