列表

详情


NC140. 排序

描述

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

数据范围: ,数组中每个元素都满足
要求:时间复杂度 ,空间复杂度
进阶:时间复杂度 ,空间复杂度

注:本题数据范围允许绝大部分排序算法,请尝试多种排序算法的实现。

示例1

输入:

[5,2,3,1,4]

输出:

[1,2,3,4,5]

示例2

输入:

[5,1,6,2,5]

输出:

[1,2,5,5,6]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 424KB, 提交时间: 2022-02-10

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型vector 待排序的数组
     * @return int整型vector
     */
    vector<int> MySort(vector<int>& arr) {
        // write code here
        for(int i=0;i<arr.size();i++) {
            for(int j=i+1;j<arr.size();j++) {
                if(arr[i]>arr[j]) {
                    int temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        return arr;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 424KB, 提交时间: 2022-02-09

class Solution {
private:
    int partition(vector<int>& arr, int start, int end) {
        int pivot = arr[start];
        
        int count = 0;
        for (int index = start + 1; index <= end; ++index) {
            if (arr[index] < pivot) {
                ++count;
            }
        }
        
        int pivotIndex = start + count;
        swap(arr[start], arr[pivotIndex]);
        int i = start;
        int j = end;
        while(i < pivotIndex) {
            while(i < pivotIndex && arr[i] < arr[pivotIndex]) {
                ++i;
            }
            while (j > i && arr[j] > arr[pivotIndex]) {
                --j;
            }
            swap(arr[i], arr[j]);
        }
        
        return pivotIndex;
    }
    void quickSort(vector<int>& arr, int start, int end) {
        if (start >= end) {
            return;
        }
        
        int middle = partition(arr, start, end);
        
        quickSort(arr, start, middle - 1);
        quickSort(arr, middle + 1, end);
    }
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型vector 待排序的数组
     * @return int整型vector
     */
    vector<int> MySort(vector<int>& arr) {
        // write code here
        int len = arr.size();
        if (len < 2) {
            return arr;
        }
        
        // quick sort
        quickSort(arr, 0, len - 1);
        
        return arr;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 428KB, 提交时间: 2022-02-10

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型vector 待排序的数组
     * @return int整型vector
     */
    void quick_sort(vector<int>& arr, int l, int r) {
        if(l >= r) return;
        int i = l - 1;
        int j = r + 1;
        int x = arr[(l + r) >> 1];
        while(i < j) {
            do i++; while(arr[i] < x);
            do j--; while(arr[j] > x);
            if(i < j) swap(arr[i], arr[j]);
        }
        quick_sort(arr, l, j);
        quick_sort(arr, j + 1, r);
    }
    
    vector<int> MySort(vector<int>& arr) {
        // write code here
        quick_sort(arr, 0, arr.size() - 1);
        return arr;
    }
};

C 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-07-29

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 将给定数组排序
 * @param arr int整型一维数组 待排序的数组
 * @param arrLen int arr数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
void quick_sort(int *arr,int l,int r)
{
    if(l<r)
    {
        int left = l,right = r,x = arr[left];
        while(left<right)
        {
            while(left<right && arr[right]>=x)
            {
                right--;
            }
            if(left<right)
            {
                arr[left++]=arr[right];
            }
            while(left<right && arr[left]<x)
            {
                left++;
            }
            if(left<right)
            {
                arr[right--]=arr[left];
            }
        }
        arr[left]=x;
        quick_sort(arr, l, left-1);
        quick_sort(arr, left+1, r);
    }
}
int* MySort(int* arr, int arrLen, int* returnSize ) {
    // write code here
    quick_sort(arr,0,arrLen-1);
    *returnSize = arrLen;
    return arr;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-07-26

class Solution {
public:
    
    vector<int> MySort(vector<int>& arr) {
        int n = arr.size();
        quickSort(arr, 0, n-1);
        return arr;
    }
    
    void quickSort(vector<int>& arr, int start, int end){
        if(start >= end) return;
        int x = rand() % (end - start + 1) + start;
        swap(arr[start], arr[x]);
        
        int first = arr[start];
        int l = start, r = end;
        while(l < r){
            while(l < r && arr[r] >= first) --r;
            if(l < r) arr[l] = arr[r];
            
            while(l < r && arr[l] <= first) ++l;
            if(l < r) arr[r] = arr[l];
        }
        
        arr[l] = first;
        quickSort(arr, start, l - 1);
        quickSort(arr, l+1, end);
    }
    
      
    
};

上一题