NC140. 排序
描述
示例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); } };