不同的排序算法/*在最近的编程学习过程中,发现我们在对一些数字进行排序时,可以采用很多种方法,下面就将我的心得分享给大家*/
//将十个整数从小到大排列
//方法一:冒泡法
/*第一个数跟第二个数比较,若前者大于后者,那么就交换位置,小的数自然上浮;接着第二个数跟第三个数比较大小,依次类推。那么第一趟比较在最后面就得到
第一大的数,第N趟就得到第N大的数*/
/*
#include<stdio.h>
#define N 10 //只需修改N后面的值,就可以对任意个整数进行排序了
void main()
{
int i,j,t,num;
int a[N];
num=N;
printf("please input %d numbers:\n",num);
for(i=0;i<N;i++) //向数组中接收N个整数
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<N-1;j++) //循环的趟数
for(i=0;i<N-1-j;i++) //每趟比较的次数
if(a[i]>a[i+1])
{ //若前面的数大于后面相邻的数,则交换位置
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers are:\n");
printf("============================================================\n");
for(i=0;i<N;i++) //输出排列后的结果
printf("%4d",a[i]);
printf("\n");
printf("============================================================\n");
}
*/
//方法二:沉降法
/*第一个数跟最后一个数比较大小,若第一个数大于最后一个数,就交换位置;接着前面两个数中较小的数跟倒数第二个数比较大小,依次类推;
那么第一趟就得到最小的数,第二趟得到第二小的数,大的数自然下沉*/
/*
#include<stdio.h>
#define N 10 //只需修改N后面的值,就可以对任意个整数进行排序了
void main()
{
int i,j,t,num;
int a[N];
num=N;
printf("please input %d numbers:\n",num);
for(i=0;i<N;i++) //向数组中接收N个整数
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<N-1;j++) //用于表示第j+1趟的第j+1个元素
for(i=N-1;i>j;i--) //用于表示第j+1趟的第N个元素
if(a[j]>a[i])
{ //若前面的数大于后面相邻的数,则交换位置
t=a[j];
a[j]=a[i];
a[i]=t;
}
printf("the sorted numbers are:\n");
printf("============================================================\n");
for(i=0;i<N;i++) //输出排列后的结果
printf("%4d",a[i]);
printf("\n");
printf("============================================================\n");
}
*/
//方法三:选择法
/*即是在以后N-1个比较过程中,选择最小的数跟第一个数交换,第二小的数跟第二个数交换,依次类推*/
#include<stdio.h>
#define N 10 //只需修改N后面的值,就可以对任意个整数进行排序了
void main()
{
int i,j,min,tem,num;
int a[N];
num=N;
printf("please input %d numbers:\n",num);
for(i=0;i<N;i++) //向数组中接收N个整数
scanf("%d",&a[i]);
printf("\n");
for(i=0;i<N-1;i++) //第i循环即是找出第i+1小的数
{
min=i;
for(j=i+1;j<N;j++)
if(a[min]>a[j])
min=j; //在i后面的数中找出最小的数,若无,则i就是最小的数
tem=a[i];
a[i]=a[min];
a[min]=tem;
}
printf("the sorted numbers are:\n");
printf("============================================================\n");
for(i=0;i<N;i++) //输出排列后的结果
printf("%4d",a[i]);
printf("\n");
printf("============================================================\n");
} |