P1177题解
提供三种做法。
题目大意
给定一个数组,将数组的元素排序后输出。
题目解答
一、 冒泡排序
算法原理:
用
第一步:将
第二步:循环重复第一步的操作。
第三步:用
代码:
输入完后,循环比较一下
二、快速排序
算法原理:
用
第一步:选择一个数
第二步:
第三步:重复前两步的操作。
第四步:两边都排好后,再把全部排一下。
第五步:输出。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int N,a[maxn];
void quicksort(int left,int right){
if(left>=right)return;
int key=left+1+(int)rand()%(right-left);
swap(a[key],a[left]);
key=left;
int i=left+1,j=right;
while(i<j){
while(a[i]<a[key]&&i<j)i++;//在数组左边,找比分界值大的数
while(a[j]>a[key]&&i<j)j--;//在数组右边,找比分界值小的数
if(i>=j)break;
swap(a[i],a[j]);//交换
i++;
j--;
}
if(a[i]>a[key]){//排序
swap(a[i-1],a[key]);
key=i-1;
}else{
swap(a[i],a[key]);
key=i;
}
quicksort(left,key-1);
quicksort(key+1,right);
}
int main(){
srand((unsigned)time(NULL));
int i;
scanf("%d",&N);
for(i=1;i<=N;i++)scanf("%d",&a[i]);//输入
quicksort(1,N);
for(i=1;i<=N;i++)printf("%d ",a[i]);//输出
cout<<endl;
return 0;
}
三、STL
利用 STL 库里的 sort 函数来排序。sort 的含义是:
例如,
sort(a+1,a+n+1)。
这里 a+1 表示从 a+n+1 表示排序到
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,a[maxn];
int main(){
int i;
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1);
for(i=1;i<=n;i++)cout<<a[i]<<" ";
cout<<endl;
return 0;
}