快排:
基本原理思想:
1:取标准。
2:从尾部看,大于则减减。小于,则把j位置的值给i位置,并把i++;
3:从头部看,小于则加加。大于,则把i位置的值给j位置,并把j--;
4:把base赋值给最后一个i位置。
5:递归调用。
代码:
#include <iostream> using namespace std; int findBaseIndex(int a[],int l,int r) { if(l<r) { int base=a[l]; int i=l,j=r; while(i<j) { while(a[j]>base && i<j) j--; if(i<j) { a[i]=a[j]; i++; } else break; while(a[i]<base && i<j) i++; if(i<j) { a[j]=a[i]; j--; } else break; } a[i]=base; return i; } } void quickSort(int a[],int l,int r) { if(l<r) { int index=findBaseIndex(a,l,r); if(index>l) quickSort(a,l,index-1); if(index<r) quickSort(a,index+1,r); } } int main() { int a[]={20,59,4,93,47,1,37}; int len=sizeof(a)/sizeof(a[0]); int l=0,r=len-1; quickSort(a,l,r); for(int i=0;i<len;i++) { cout<<a[i]<<" "; } return 0; }
过程中犯下的错误:溢出。ij的值一直控制不好。