题目描述 Description
给出n和n个整数,希望你从小到大给他们排序
输入描述 Input Description
第一行一个正整数n
第二行n个用空格隔开的整数
输出描述 Output Description
输出仅一行,从小到大输出n个用空格隔开的整数
样例输入 Sample Input
3
3 1 2
样例输出 Sample Output
1 2 3
数据范围及提示 Data Size & Hint
1<=n<=100000
代码
冒泡排序
#include<stdio.h>
int a[100001];
int main()
{
int n;
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
scanf("%d",a+i);
int j,k,max;
for(j=0;j<n-1;j++){
for(k=0;k<n-j-1;k++){
if(a[k]>a[k+1]){
max=a[k];
a[k]=a[k+1];
a[k+1]=max;
}
}
}
for(j=0;j<n;j++){
printf("%d",a[j]);
if(j!=n-1)
printf(" ");
}
return 0;
}
c自带函数sort
#include<stdio.h>
#include<stdlib.h>//函数在此头文件中
int comp(const void *a,const void *b)
{
return *(int*)a-*(int*)b;//升序
//return *(int *)b-*(int *)a;降序
}
int main()
{
int n,a[100000];
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(a[0]),comp);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
快排
#include <stdio.h>
int a[100005], n;
void quicksort(int left,int right)
{
int i, j, base;
i = left;
j = right;
base = a[(i+j) / 2];
while (i <= j){
while (a[i] < base) i++;
while (a[j] > base) j--;
if (i<=j){
int t = a[i];
a[i] = a[j];
a[j] = t;
i++;
j--;
}
}
if (left < j)
quicksort(left, j);
if (i < right)
quicksort(i, right);
}
int main(void)
{
int i;
scanf("%d",&n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
quicksort(0, n - 1);
for(i = 0; i < n; i++){
printf("%d",a[i]);
if(i<n-1)
printf(" ");
}
printf("\n");
return 0;
}