给定N个(长整型范围内的)整数,要求输出从小到大排序后的结果。
本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下:
数据1:只有1个元素;
数据2:11个不相同的整数,测试基本正确性;
数据3:103个随机整数;
数据4:104个随机整数;
数据5:105个随机整数;
数据6:105个顺序整数;
数据7:105个逆序整数;
数据8:105个基本有序的整数;
数据9:105个随机正整数,每个数字不超过1000。
输入格式:
输入第一行给出正整数N(≤10
5
),随后一行给出N个(长整型范围内的)整数,其间以空格分隔。
输出格式:
在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。
输入样例:
11
4 981 10 -17 0 -20 29 50 8 43 -5
输出样例:
-20 -17 -5 0 4 8 10 29 43 50 981
#define MAXSIZE 100000
typedef int ElementType;
void Sway(int *pa, int *pb);
//插入排序
void Insertion_Sort(int A[], int n)
{
int P,i;
ElementType Tmp;
for(P=1;P<n; P++)
{
Tmp = A[P]; //get one number which has not yet been inserted
for(i=P; i>0&&A[i-1]>Tmp; i--)
{
A[i] = A[i-1];
}
A[i] = Tmp;
}
}
//冒泡排序
void Bubble_Sort(int A[], int n)
{
int i, P, flag;
for(P = n-1; P>= 0;P--) //Q: can't use i=0; i<n; i++
{
flag = 0;
for(i=0;i<P;i++) //Q: can't use j=0; j<n-i; j++;
{
if(A[i]>A[i+1])
{
Sway(&A[i], &A[i+1]); //传入地址
flag = 1;
}
}
if(flag == 0)
{
break;
}
}
}
int main()
{
int n;
int i;
int A[MAXSIZE];
scanf("%d", &n);
for(i=0;i<n;i++)
{
scanf("%d", &A[i]);
}
//Bubble_Sort(A, n); // 冒泡排序 10^5 cannot run
Insertion_Sort(A, n); //插入排序
printf("%d", A[0]);
for(i=1;i<n;i++)
{
printf(" %d", A[i]);
}
}
//交换两个数字
void Sway(int *pa, int *pb) //指针
{
int tmp;
tmp = *pa; //*pa即指针所指向的值
*pa = *pb;
*pb = tmp;
}