知识点
疑问
暂无
代码
//本题采用快速排序试试,练练手
#include "bits/stdc++.h"
using namespace std;
const int maxn = 110;
//输入的数字数,也就是长度
int n;
//存储数据的数组
int A[maxn];
int partition(int A[],int left,int right){
//我们是以left作为中心点的
int temp = A[left];
while(left != right){ //只要left和right没有相遇
while(left != right && A[right] > temp){ //只要一直大于并且未相遇
right--;
}
A[left] = A[right]; //将right赋值到左边
while(left != right && A[left] <= temp){ //判断left!= right可以防止全是同一个数的情况
left++;
}
A[right] = A[left];
}
//最后left等于right,这就是中心点应该在的地方
A[left] = temp;
return left;
}
void quickSort(int A[],int left,int right){
if(left < right){//递归边界是left >= right,想想只有两个元素的时候的情况
int pos = partition(A,left,right);
quickSort(A,left,pos-1);
quickSort(A,pos+1,right);
}
}
void print(int A[],int n){
for(int i=1;i<=n;i++){
printf("%d ",A[i]);
}
printf("\n");
}
int main(){
while(~scanf("%d",&n)){
//数组下标从1开始存储
for(int i=1;i<=n;i++){
scanf("%d",&A[i]);
}
quickSort(A,1,n);
print(A,n);
}
return 0;
}
反思
- 排序算法有很多种,到底应该选哪种呢?
我们应该从时间复杂度和空间复杂度的角度去考虑,综合选取合适的排序算法; - 其他需要注意的就是快速排序的一些代码细节。。。
- C++11与C++14日常写题没啥区别,大佬推荐C++14,它快一些。