
/*
有一数组存放着无序序列K1,K2,K3,...,Kn,现要求将Kn放在将元素排序后的正确位置上,试编写实现该功能的算法
要求比较关键字的次数不超过n。
分析:
这里要求比较关键字的次数不超过n,就不能用复杂度为n²的排序算法,而且我们要用能够确定元素位置的排序算法,
所以我们首选快速排序
快速排序每一次可以确定一个元素的最终位置,这里我们既然要确定Kn的位置,那我们就把Kn最为枢纽元素,进行一次快速
排序, Kn的位置也就确定了
*/
#include <stdio.h>
void putKtoCurPos(int *arr, int low, int high) {
int pivot = arr[high];//将Kn作为枢纽
while (low < high) {
while (arr[low] <= pivot)++low;
arr[high] = arr[low];
while (arr[high] >= pivot)--high;
arr[low] = arr[high];
}
arr[low] = pivot;
}
int main() {
int arr[] = {2,5,4,1,3,11,5,8,4,6};
putKtoCurPos(arr,0,9);
for (int i = 0; i < 10;i++) {
printf("%d ",arr[i]);
}
return 0;
}