描述
给定一个长度为 n 的数组,请你编写一个函数,返回该数组按升序排序后的结果。
要求:时间复杂度 O( n^2 ),空间复杂度 O(n)
进阶:时间复杂度 O(nlogn),空间复杂度 O(n)
注:本题数据范围允许绝大部分排序算法,请尝试多种排序算法的实现。
方法一:调用库函数sort()
class Solution {
public:
//调用库函数
vector<int> MySort(vector<int>& arr) {
sort(arr.begin(),arr.end());
return arr;
}
};
方法二:冒泡排序
class Solution {
public:
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
vector<int> MySort(vector<int>& arr) {
for(int i=0;i<arr.size()-1;i++){
for(int j=0;j<arr.size()-i-1;j++){
if(arr[j]>arr[j+1]){
swap(arr[j], arr[j+1]);
}
}
}
return arr;
}
};
方法三:快速排序
class Solution {
public:
void quick_sort(int l,int r,vector<int>& arr){
if(l>=r) return;
int i=l,j=r;
int x=arr[l];//基准元素
while(i<j){
while(i<j&&arr[j]>=x) j--;
if(i<j) arr[i++]=arr[j];
while(i<j&&arr[i]<x) i++;
if(i<j) arr[j--]=arr[i];
}
arr[i] =x;
quick_sort(l, i-1, arr);
quick_sort(i+1, r, arr);
}
vector<int> MySort(vector<int>& arr) {
int r=arr.size()-1;
quick_sort(0, r, arr);
return arr;
}
};
方法四:选择排序
每次选择最小的(假设需要从小到大排序)
void select_sort(int arr[]){
for(int i=0;i<=4;i++){
for(int j=i+1;j<=5;j++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}