排序之冒泡排序

    思想:首先是将第1个数和第2个数进行比较,若为逆序(R[1]>R[2]),则交换这两个数的位置,然后比较第2个数和第3数,以此类推,直至第n-1个数和第n个数进行比较为止.这个过程称为第一趟冒泡排序,排序结果是最大的数被排在了最后。即R[n].

    接着进行第二趟冒泡排序,即对前n-1个数再次进行两两比较,若为逆序则交换,排序结果是第二大的数被排在倒数第二。即R[n-1].然后进行第三趟冒泡排序,对前n-2个数进行同样的操作,以此类推。

     比如:10个数进行冒泡排序,必须进行9趟排序,每一趟中两个数比较次数是不相同的,第一趟比较10-1=9次(10为许排序的数目,1为该趟的趟数),第二趟要比较10-2=8次,以此类推,第i趟要比较的次数=10-i.

    如有n个数,则要进行n-1趟排序(由外循环控制),第i趟两数之间的比较要进行n-i次(由内循环控制).

 

#include<stdio.h> /*头文件*/
#define M 100 /*定义常量*/
int R[M]; /*定义数组*/
void main()
{

int i,j,temp,n;
clrscr();
/*清屏幕函数*/
printf(
"input n size:");/*数组大小*/
scanf(
"%d",&n);

printf(
"input number one by one:\n");
for(i=1;i<=n;i++)/*一个一个的输入数组元素*/
{
scanf(
"%d",&R[i]);
}
printf(
"before sort numbers:\n");
for(i=1;i<=n;i++)/*打印排序之前的数组元素*/
{
printf(
"%4d",R[i]);
}
printf(
"\n");
for(i=1;i<=n-1;i++)/*排序趟数*/
{
for(j=1;j<=n-i;j++)/*每趟比较次数*/
{
if(R[j]>R[j+1]) /*判断前一个数据元素是否比后一个大,大于则交换*/
{
temp
=R[j];
R[j]
=R[j+1];
R[j
+1]=temp;
}
}
}
printf(
" after sort numbers:\n");
for(i=1;i<=n;i++) /*打印冒泡排序之后序列*/
{
printf(
"%4d",R[i]);
}
system(
"pause");
}

 

posted on 2010-11-30 12:13  别人叫我军师  阅读(452)  评论(2编辑  收藏  举报