以枢轴为中心的交换排序
设计思路:
- 1.选择第一个元素作为基准
- 2.用两个探头i和j作为下标分别指向序列的头和尾
- 3.探头往里探,当j的元素比基准元素小时,跳出循环,判断探头i
- 4.当i的元素比基准元素大时, 交换两个探头的元素
- 5.当i>j的时候,说明探头工作结束,即i==j的时候,两个探头移到一起,这时交换基准和i的值
- 6.递归调用,左面和右面
#include <iostream>
using namespace std;
void quickSort(int arrs[], int low, int hight){
int i = low;
int j = hight;
if(i>j){
return ;
}
int temp = arrs[i];
while(i<j){
while(i<j && temp<=arrs[j]){//基准元素大于探头元素跳出循环,即要放到枢轴右面的比基准元素小的数
j--;
}
while(i<j && temp>=arrs[i]){
i++;
}
if(i<j){
swap(arrs[i],arrs[j]);
}
}
swap(arrs[low],arrs[i]);//交换基准元素和 i、j碰到一起的元素
quickSort(arrs,low,j-1);//递归左面,j-1相当于i-1
quickSort(arrs,i+1,hight);//递归右面i+1相当于j+1
}
int main(){
int arrs[] = {5,5,6,4,1,8,6,10,11,100,4};
quickSort(arrs,0,10);
for(int &i : arrs){
cout<<i<<" ";
}
return 0;
}