选择排序
#include<stdio.h>
int main()
{
int i,j,t,a[11];
printf("请输入10个数:\n");
for(i=1;i<=10;i++)
scanf("%d",&a[i]);/*输入10个数字*/
for(i=1;i<=9;i++)
for(j=i+1;j<=10;j++)
if(a[i]>a[j])/*如果前一个数比后一个数大,则利用中间变量t实现两值互换*/
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
printf("排序后的顺序:\n");
for(i=1;i<=10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
归并排序
#include<stdio.h>
void merge(int r[],int s[],int x1,int x2,int x3)
{
int i=x1;/*第一部分开始位置*/
int j=x2+1;/*第二部分开始位置*/
int k=x1;
while ((i<=x2)&&(j<=x3))/*i和j都在要合并的序列中*/
{
if(r[i]<=r[j])/*筛选两部分中较小的到数组s中*/
{
s[k]=r[i];
i++;
k++;
}
else
{
s[k]=r[j];
j++;
k++;
}
}
while (i<=x2)/*将x1~x2部分中未比较的数顺次加入r中*/
s[k++]=r[i++];
while(j<=x3)/*将x2+1~x3部分中未比较的数顺次加入r中*/
s[k++]=r[j++];
}
void merge_sort(int r[],int s[],int m,int n)
{
int p;
int t[20];
if(m==n)
s[m]=r[m];
else
{
p=(m+n)/2;
merge_sort(r,t,m,p);
/*调用递归函数merge_sort()函数将r[m]~r[p]归并成有序的t[m]~t[p]*/
merge_sort(r,t,p+1,n);
/*调用递归函数merge_sort()函数将r[p+1]~r[n]归并成有序的t[p+1]~t[n]*/
merge(t,s,m,p,n);
/*调用函数将前两部分归并到s[m]~s[n]*/
}
}
int main()
{
int a[11];
printf("请输入10个数字:\n");
for(int i=1;i<=10;i++)
{
scanf("%d",&a[i]);
}
merge_sort(a,a,1,10);
printf("请输出排序后的数组:\n");
for(int i=1;i<=10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}