快排
原理描述:
- 在数组中取出任意1个元素作为中间数,通过比较大小用来划分左右元素,大于中间数在其右侧,小于在其左侧,等于不变;
- 通过分而治之的原则 ,进行递归重复执行步骤1实现排序。
过程:
先右后左的执行顺序,找到跳出,递归前后部分
代码实现:
1 #include <iostream> 2 using namespace std; 3 4 void QuickSort(int array[],int left ,int right) 5 { 6 if(left >=right) 7 { 8 return; 9 } 10 int i=left; 11 int j=right; 12 //基数 13 int baseNum =array[i]; 14 while(i <j) 15 { 16 17 while(i <j) 18 { 19 // 从后向前查找小于 baseNum的数据 20 if( array[j]<=baseNum) 21 { 22 //找到的内容放在前面预留的位置 23 array[i]= array[j]; 24 i++;//后移动 25 break; 26 } 27 else 28 { 29 //找不到一直向前找 30 j--; 31 } 32 } 33 while(i <j) 34 { 35 36 //从前向后 查找大于baseNum的数据 37 if( array[i]>baseNum) 38 { 39 array[j]= array[i]; 40 j--;//前移动 41 break; 42 } 43 else 44 { 45 i++; //找不到一直向后找 46 } 47 } 48 } 49 50 //中间位置 赋值基线值 51 array[i]=baseNum; 52 //前部分再次重复划分 i-1原因是不包含其中间值 53 QuickSort(array,left,i-1); 54 //后部分重复划分 i+1原因是不包含其中间值 55 QuickSort(array,i+1,right) ; 56 } 57 58 int main() 59 { 60 int ls[]={3,21,87,1,21,10}; 61 for(int i=0;i<6;i++) 62 { 63 cout<<ls[i]<<endl; 64 } 65 int len = sizeof(ls)/sizeof(int); 66 cout<< len<<endl; 67 QuickSort(ls,0,5); 68 for(int i=0;i<6;i++) 69 { 70 cout<<ls[i]<<endl; 71 } 72 return 0; 73 }