打印

不同的排序算法(转)

[复制链接]
1250|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
米其林r|  楼主 | 2011-1-31 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不同的排序算法/*在最近的编程学习过程中,发现我们在对一些数字进行排序时,可以采用很多种方法,下面就将我的心得分享给大家*/

//将十个整数从小到大排列

//方法一:冒泡法
/*第一个数跟第二个数比较,若前者大于后者,那么就交换位置,小的数自然上浮;接着第二个数跟第三个数比较大小,依次类推。那么第一趟比较在最后面就得到
第一大的数,第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");
}

相关帖子

沙发
maoyanketi| | 2011-1-31 15:45 | 只看该作者
楼主用的什么编译器了,下载下来看下

使用特权

评论回复
板凳
黑发尤物| | 2011-1-31 19:25 | 只看该作者
对初学者还是很有帮助的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

340

主题

1587

帖子

3

粉丝