快速排序的思路:
快速排序是一种分治的排序算法。它的基本思路是选择一个基准元素,然后将待排序序列分成左右两个子序列,左子序列中的元素都小于等于基准元素,右子序列中的元素都大于等于基准元素。然后对左右子序列分别进行快速排序,最后将左子序列、基准元素、右子序列拼接起来得到已排序的序列。
具体的实现步骤如下:
- 选择一个基准元素(一般是待排序序列的第一个元素)。
- 遍历待排序序列,将小于等于基准元素的元素放到左边,大于等于基准元素的元素放到右边。遍历结束后,基准元素所在的位置就是最终的排序位置。
- 对基准元素左边的子序列和右边的子序列分别递归地进行快速排序。
- 递归终止条件是子序列中只有一个元素或没有元素。
快速排序的时间复杂度为O(nlogn),空间复杂度为O(logn)。
快速排序的代码:
#include<bits/stdc++.h>
using namespace std;
int a[1005];
void quickSort(int a[],int begin,int end){
int i,j,tmp;
if(begin>=end) return;
tmp=a[begin];
i=begin;
j=end;
while(i<j){
while(a[j]>tmp)
j--;
while(a[i]<=tmp && i<j)
i++;
if(i!=j)
swap(a[i],a[j]);
}
swap(a[begin],a[i]);
quickSort(a,begin,i-1);
quickSort(a,i+1,end);
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
quickSort(a,1,n);
for(int i=1;i<=n;i++)
cout<<a[i];
return 0;
}