四时宝库

程序员的知识宝库

数组排序-C++(数组排序c代码)

描述

给定一个数组,请你编写一个函数,返回该数组排序后的形式。

示例1

输入:

[5,2,3,1,4]

返回值:

[1,2,3,4,5]

示例2

输入:

[5,1,6,2,5]

返回值:

[1,2,5,5,6]

复制

备注:

数组的长度不大于100000,数组中每个数的绝对值不超过10^9109
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型vector 待排序的数组
     * @return int整型vector
     */
    vector<int> MySort(vector<int>& arr) {
        // write code here
        int length = arr.size();
        quickSort(arr, 0, length - 1);
        return arr;
    }
    
    void quickSort(vector<int>& arr, int left, int right)
    {
        if(left < right)
        {
            //分割数据点,找到分割点
            int point = partition(arr, left, right);
            //递归调用,对左子树进行排序
            quickSort(arr, left, point - 1);
                //递归调用,对右子树进行排序
            quickSort(arr, point + 1, right);
            
        }
    }
    
    //分割数组,找到分割点
    int partition(vector<int>& arr, int left, int right)
    {
        int first = arr[left];
        while(left < right)
        {
            while(left < right && arr[right] >= first)
            {
                right--;
            }
            swap(arr, left, right);
            
            while(left < right && arr[left] <= first)
            {
                left++;
            }
            swap(arr, left, right);
        }
        return left;
    }
    
    void swap(vector<int>& arr, int i, int j)
    {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
};

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接