1.算法思路:
选择一个基准点,将数组中比基准点小的值移到基准值左边,比基准值大的移到基准值右边。然后递归调用,将基准值左右两边的数组做同样操作,递归结束的条件是数组只有一个元素。
基准点归位的方法:
设一头一尾两个指针,右指针向左找比第一个基准值小的数,左指针向右找第一个比基准值大的数,找到后交换,直到左指针==右指针;
2.代码:
void quicksort(int left,int right) { int i,j,t,temp; if(left>right) return; temp=a[left]; //temp中存的就是基准数 i=left; j=right; while(i!=j) { while(a[j]>=temp && i<j) j--; while(a[i]<=temp && i<j) i++; //交换 if(i<j) { 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); }
原文地址:https://www.cnblogs.com/teensSpirit-code-life/p/11741377.html
时间: 2024-09-27 02:51:07