整数排序 II

来源:互联网 发布:淘宝云客服报名 编辑:程序博客网 时间:2024/06/03 22:01

问题描述:给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。

样例:给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。

解题思路:根据题目要求,可以使用归并排序,快速排序与堆排序。这里选择一种我比较熟悉的快速排序。归并排序的思想为找到一个基准元素,通过排序使得左边的值都比中间值小,右边的数都比中间值大。然后再取一个基准元素,重复以上过程。所以快速排序是一个递归过程,在写程序的时候可以通过调用递归函数来实现。

实现代码:

class Solution {
public:
    /**
     * @param A an integer array
     * @return void
     */
     void sortIntegers2(vector<int>& A)
     {   
         quickSort(A, 0, A.size() - 1);
    }
    
private:
    void quickSort(vector<int> &A, int l, int r) {
        if (l >= r) {
            return;
        }
        
        int i = l, j = r;
        int pivot = A[(l + r) / 2];
        
        while (i <= j) {
            while (i <= j && A[i] < pivot) {
                i++;
            }
            while (i <= j && A[j] > pivot) {
                j--;
            }
            if (i <= j) {
                int temp = A[i];
                A[i] = A[j];
                A[j] = temp;
                i++;
                j--;
            }
        }
        
        quickSort(A, i, r);
        quickSort(A, l, j);
    }
};

做题感想:这道题的思想可以说是很了解,但是问题就是出在怎样在函数中调用另外一个函数,怎样定义另外一个函数。这方面的能力还要加强。

原创粉丝点击