int sort(int *data,int left,int right){
//一轮下来要找到哨兵的位置。
if(left>right) return 0;
int i=left;
int j=right;
int key=data[left];
while(i<j){
while(i<j&&key<data[j]){
//先从后向前找,如果哨兵小,就一直想前找
j--;
}
//找到一个值小于哨兵,那么
data[i]=data[j];//覆盖哨兵的位置
while(i<j&&key>=data[i]){
//如果哨兵大,
i++;
}
data[j]=data[i];
//data[j] 是比哨兵小的,data[i]是比哨兵大的
}
//i==j
data[i]=key;//哨兵归位
//递归
sort(data,left,i-1);
sort(data,i+1,right);
}
【快速排序】
于 2022-04-08 14:27:43 首次发布