数列排序的几种排序方法
时间限制:1.0s 内存限制:512.0MB
问题描述:给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式:第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式:输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *getinfo(int n);
void insert(int n);
void show(int);
void bubblesort(int n);
void QuickSort(int num[],int n);
int *num=NULL;
int main()
{
int n,i;
scanf("%d",&n);
num=getinfo(n);
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
//insert(n);//插入排序
//bubblesort(n);
QuickSort(num,n);//快速排序
show(n);
free(num);
return 0;
}
void insert(int n)//插入排序
{
int i,j,temp;
for(i=1;i<n;i++)
{
temp=num[i];
j=i;
while(j>0&&temp<num[j-1])
{
num[j]=num[j-1];
j--;
}
num[j]=temp;
}
}
void bubblesort(int n)//冒泡排序
{
int i,j,temp;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(num[j+1]<num[j])
{
temp=num[j+1];
num[j+1]=num[j];
num[j]=temp;
}
}
}
}
void QuickSort(int num[],int n)//快速排序法
{
int i=0,j=n-1;
int val=num[0];
if(n>1)
{
while(i<j)
{
for(;j>i;j--)
if(num[j]<val)
{
num[i++]=num[j];
break;
}
for(;i<j;i++)
if(num[i]>val)
{
num[j--]=num[i];
break;
}
}
num[i]=val;
QuickSort(num,i); //递归思想
QuickSort(num+i+1,n-i-1);
}
}
int *getinfo(int n)
{
int *p=NULL;
p=(int *)malloc(sizeof(int)*n);
if(NULL==p)
{
exit(0);
}
return p;
}
void show(int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",num[i]);
}
}
(全文完)