算法1
7-2 快速排序 (10 分)
给定包含n个元素的整型数组a[1],a[2],...,a[n],利用快速排序算法对其进行递增排序,请输出排序过程,即每次Partition之后的数组。每次选择所处理的子数组的第一个元素作为基准元素。
输入格式:
输入为两行,第一行为一个整数n(1<n≤1000),表示数组长度。第二行为n个空格间隔的整数,表示待排序的数组。
输出格式:
输出为若干行,每行依次输出Partition后的数组,每个元素后一个空格。
输入样例:
5
4 5 3 2 1
结尾无空行
输出样例:
2 1 3 4 5
1 2 3 4 5
1 2 3 4 5
结尾无空行
#include<iostream>
using namespace std;
int n;
void print(int *arr){
for(int i=0;i<n;i++){
printf("%d ",arr[i]);
}
cout<<endl;
}
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
void quicksort(int *arr,int left,int right){
if(left>=right){
return;
}
int l=left;
int r=right;
int key=arr[left];
while(l<r){
while(l<r&&arr[r]>key){
r--;
}
while(l<r&&arr[l]<=key){
l++;
}
swap(arr[r],arr[l]);
}
//将起始值和ij相等的交换,此时左边数都小,右边数都大
swap(arr[l],arr[left]);
print(arr);
quicksort(arr,left,l-1);
quicksort(arr,l+1,right);
}
int main(){
cin>>n;
int arr[n];
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
quicksort(arr,0,n-1);
for(int i=0;i<n;i++){
printf("%d ",arr[i]);
}
return 0;
}
快速排序两种方法,交换能过 另一个有些点过不去