C语言网

 找回密码
 加入社区!

QQ登录

只需一步,快速开始

查看: 1035|回复: 18

不同的排序算法   [复制链接]

Rank: 1

主题
0
帖子
28
C币
40 枚
在线时间
3 小时
发表于 2010-4-10 11:00:23 |显示全部楼层
分享到:
/*在最近的编程学习过程中,发现我们在对一些数字进行排序时,可以采用很多种方法,下面就将我的心得分享给大家*/

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

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

查看全部评分

Rank: 1

主题
0
帖子
17
C币
7 枚
在线时间
3 小时
发表于 2010-6-3 11:21:32 |显示全部楼层
感谢!我喜欢冒泡

Rank: 1

主题
0
帖子
5
C币
4 枚
在线时间
0 小时
发表于 2010-7-5 12:40:32 |显示全部楼层
我喜欢选择排序

Rank: 2

主题
0
帖子
73
C币
84 枚
在线时间
11 小时
发表于 2010-7-5 14:58:47 |显示全部楼层
这个,我对沉降法不是很明了,一趟排序完之后,那么第二趟排序的结果是……

Rank: 8Rank: 8

主题
24
帖子
636
C币
758 枚
在线时间
504 小时
发表于 2010-7-5 15:03:49 |显示全部楼层
边分析边画图!应该可以理解的,楼上的试试哈 4# 511232871
因为执着,所以成功

Rank: 2

主题
2
帖子
83
C币
93 枚
在线时间
16 小时
发表于 2010-9-1 23:30:47 |显示全部楼层
#define N 10                //只需修改N后面的值,就可以对任意个整数进行排序了
个人感觉 如果是手工输入   N太大也没必要也不现实
应该用读取文件吧

Rank: 1

主题
2
帖子
21
C币
19 枚
在线时间
2 小时
发表于 2010-9-9 20:53:33 |显示全部楼层
不错不错......

Rank: 1

主题
0
帖子
14
C币
14 枚
在线时间
0 小时
发表于 2010-10-8 18:20:00 |显示全部楼层
受教了,顶起

Rank: 1

主题
0
帖子
4
C币
4 枚
在线时间
0 小时
发表于 2010-10-25 21:45:50 |显示全部楼层
好东东!!!!!!!!!!!

Rank: 1

主题
2
帖子
5
C币
5 枚
在线时间
1 小时
发表于 2010-11-1 14:28:43 |显示全部楼层
支持!!!
您需要登录后才可以回帖 登录 | 加入社区!

C语言 ( 粤ICP备11042647号-2 )

GMT+8, 2012-5-20 18:07

©2009-2011 cyuyan.com.cn

回顶部