针对不同的排序
题目:
给定NN个(长整型范围内的)整数,要求输出从小到大排序后的结果。
本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下:
数据1:只有1个元素;
数据2:11个不相同的整数,测试基本正确性;
数据3:103个随机整数;
数据4:104个随机整数;
数据5:105个随机整数;
数据6:105个顺序整数;
数据7:105个逆序整数;
数据8:105个基本有序的整数;
数据9:105个随机正整数,每个数字不超过1000。
输入格式:
输入第一行给出正整数NN(\le 10^5≤10
5
),随后一行给出NN个(长整型范围内的)整数,其间以空格分隔。
输出格式:
在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。
输入样例:
11
4 981 10 -17 0 -20 29 50 8 43 -5
输出样例:
-20 -17 -5 0 4 8 10 29 43 50 981
(1)希尔排序—–均通过
##include<cstdio>
##include<algorithm>
using namespace std;
##define MAXN 100000
int A[MAXN];
int N;
void Shell_sort(){
int i;
int temp;
for(int D = N / 2; D > 0; D /= 2){
for(int P = D; P <= N ; P++){
temp = A[P];
for(i = P; i > D && A[i - D] > temp; i -= D)
A[i] = A[i - D];
A[i] = temp;
}
}
for(int i = 1 ; i <= N; ++i){
if(i == 1)
printf("%d", A[i]);
else
printf(" %d", A[i]);
}
}
int main(void){
scanf("%d", &N);
for(int i = 1;i <= N; ++i)
scanf("%d", &A[i]);
Shell_sort();
return 0;
}
(2)冒泡——-好几个没过
![这里写图片描述](https://img-blog.csdn.net/20161214211224607?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuZmFuNDU2OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
##include<cstdio>
##include<algorithm>
using namespace std;
##define MAXN 100000
int A[MAXN];
int N;
void solve(){
int temp;
for(int P = N - 1; P >= 0; P--){
int flag = 0;
for(int i = 0; i < P; ++i){
if(A[i] > A[i + 1]){
swap(A[i], A[i + 1]);
flag = 1;
}
}
if(flag == 0) break;
}
for(int i = 0 ; i < N; ++i){
if(!i)
printf("%d", A[i]);
else
printf(" %d", A[i]);
}
}
int main(void){
scanf("%d", &N);
for(int i = 0;i < N; ++i)
scanf("%d", &A[i]);
solve();
return 0;
}
(3)插入——-(有时全过,有时一个运行超时)
![这里写图片描述](https://img-blog.csdn.net/20161214211057186?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuZmFuNDU2OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
##include<cstdio>
##include<algorithm>
using namespace std;
##define MAXN 100000
int A[MAXN];
int N;
void solve(){
int temp;
int i;
for(int P = 1; P < N ; P++){
temp = A[P];
for(i = P; i > 0 && A[i - 1] > temp; --i)
A[i] = A[i - 1];
A[i] = temp;
}
for(int i = 0 ; i < N; ++i){
if(!i)
printf("%d", A[i]);
else
printf(" %d", A[i]);
}
}
int main(void){
scanf("%d", &N);
for(int i = 0;i < N; ++i)
scanf("%d", &A[i]);
solve();
return 0;
}