用C实现“快速排序”

50 阅读1分钟
  • (void)quickSort:(int *)arr begin:(int)begin end:(int)end {

    /*快速排序

     1.在数组中选一个基准数(通常为数组第一个);

     2. 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边;

     3. 对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。

     */

    //int array[10] = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};

    if (begin >= end) {

        return;

    }

    int temp = arr[begin];

    int i = begin;

    int j = end;

    while (i < j) {

        while (arr[j] >= temp && j > i) {

            j --;

        }

        while (arr[i] <= temp && j > i) {

            i ++;

        }

        printf("i = %d,j = %d\n",i,j);

        if (i < j) {

            int tmp = arr[i];

            arr[i] = arr[j];

            arr[j] = tmp;

        }

    }

    

    int tmp = arr[begin];

    arr[begin] = arr[i];

    arr[i] = tmp;

    

    [self quickSort:arr begin:begin end:i - 1];

    [self quickSort:arr begin:i + 1 end:end];

}