108.png

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