排序

题目:

给定一个长度为 n 的数组,请你编写一个函数,返回该数组按升序排序后的结果。

示例:

输入:[5,2,3,1,4]

返回值:[1,2,3,4,5]

输入:[5,1,6,2,5]

返回值:[1,2,5,5,6]

方法:

快速排序

思路:

将当前数组中的第一个元素设为枢轴值。将小于枢轴值的元素移动到左端,将大于枢轴值的元素移动到右端,枢轴值放置在空出的位置上。递归上述过程直至所有元素放到其最终位置上。

```/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 将给定数组排序
 * @param arr int整型一维数组 待排序的数组
 * @param arrLen int arr数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
//快速排序
void QuickSort(int* arr, int low, int high){
    if (low < high){//递归跳出条件
        int pivotpos = Partition(arr, low, high);//划分
        QuickSort(arr, low, pivotpos - 1);     //依次对两个子表进行递归排序
        QuickSort(arr, pivotpos + 1, high);   
    }
}
int Partition(int* arr, int low, int high){
    int pivot = arr[low];//当前表中第一个元素设为枢轴值,对表进行划分
    while(low < high){//循环跳出条件
        while(low < high && arr[high] >= pivot)
            --high;
        arr[low] = arr[high];//将比枢轴值小的元素移动到左端
        while(low < high && arr[low] <= pivot)
            ++low;
        arr[high] = arr[low];//将比枢轴值大的元素移到右端
    }
    arr[low] = pivot;//枢轴元素存放最终位置
    return low;//返回存放枢轴的最终位置
}
int* MySort(int* arr, int arrLen, int* returnSize ) {
    // write code here
    QuickSort(arr, 0, arrLen - 1);
    *returnSize = arrLen;
    return arr;
}