范文无忧网公文文书入党入团

求关于c语言冒泡排序法的讲解

02月27日 编辑 fanwen51.com

[高分急C语言如何实现多线程有具体方案请提供!]你这个问题可是超过200分的啊, 这个往大了说是一个比较复杂的设计方案。 实际上C语言是没有多线程的概念的,但是我们可以通过Task来实现多任务。 简单的说,可以采取以下方案: 定...+阅读

求关于c语言冒泡排序法的讲解

冒泡排序法是简单的排序方法之一,它和气泡从水中往上冒的情况有

些类似。其具体做法是

(1)对于数组a中的1至n个数据,先将第n个和第n-1个数据进行比较,如果

a(n)

然后比较第n-1个和第n-2个数据;依次类推,直到第2个数据和第1个数据

进行比较交换,这称为一趟冒泡。这一趟最明显的效果是:将最小的数据传到了

第1位。

由此还可推断出,对于n个数,一趟应该进行n-1 次比较操作。算法流程如

下图所示:

(2)然后,对2至n个数据进行同样操作,则具有次小值的数据被安置在第2位

上。

(3)重复以上过程,每次的移动都向最终排序的目标前进,直至没有数据需要交换为止。

这种排序的方法被形象地比喻成“冒泡”,在排序过程中,小的数就如气泡一般逐层上冒,而大的数逐个下沉。

C语言冒泡排序法

#include<stdio.h>; //链接标准头文件

#define N 5 //定义常量N并赋值为5

void main() //主函数入口

{ //表示主函数开始

int i,j; //定义整形变量i和j

int grade[N],temp; //定义N维(N=5,也就是五维啦^^)整形数组和整形变量temp

printf("输入5个数\n"); //在屏幕上显式“输入5个数”并且换行

for(i=0;i<N;i++) //开始for循环,从i=0,每次加1,直到i=4,共需循环5次

{ //循环体开始

scanf("%d",&grade[i]); //依次获取用户输入的整数值并存入数组grade中

} //循环结束

for(i=0;i<N;i++) //开始外层for循环,从i=0,每次加1,直到i=4

{ //外层循环体开始

for(j=0;j<N-1-i;j++) //开始外层for循环,从j=0,每次加1直到i等于外层循环的N-j-1

{ //内层循环体开始

if(grade[j]<grade[j+1]) //条件判断

{ //如果整形数组前面的数比其后的小,执行以下语句

temp=grade[j+1]; //将比较大的数赋值给temp

grade[j+1]=grade[j]; //将比较小的数赋值给数组中后面的变量

grade[j]=temp; //将比较大的数赋值给数组中前面的变量

} //从此便完成大小变量的交换,使得大值往前放

} //结束内层循环

} //结外内层循环,完成排序

printf("最后排序为:\n");//在屏幕显式“最后排序为:”并换行

for(i=0;i<N;i++) //同开始的for循环类似

{ //开始循环输出

printf("%d",grade[i]); //只是这里要逐个输出数组中的五个数值

} //结束循环输出

printf("\n"); //输出换行到屏幕,看不到什么效果,可删掉

} //结束main()函数

C语言冒泡排序法的详细注释

/* 用冒泡排序法对一维整型数组中的十个数升序排序 */

#include

int main()

{int i,j,t,a[10];

printf("Please input 10 integers:\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=0;i<9;i++) /* 冒泡法排序 */

for(j=0;j<10-i-1;j++)

if(a[j]>a[j+1])

{t=a[j];/* 交换a[i]和a[j] */

a[j]=a[j+1];

a[j+1]=t;

}

printf("The sequence after sort is:\n");

for(i=0;i<10;i++)

printf("%-5d",a[i]);

printf("\n");

system("pause");

return 0;

}

其中i=0时:

j从0开始a[0],a[1]比较大小,把其中的较大者给a[1],然后j++,a[1]和a[2]再比较,再把两者中的

较大者给a[2],这样a[0],a[1],a[2]中的最大者已经交换到a[2]中,这样继续直到j=10-i-1=9这样

a[9]中的为10个数中的最大数。

然后i=1时:

由于最大数已找到并放到a[9]中,所以这一次循环j最大只需到10-i-1=8,即a[8]即可,再次从j=0开始a[j]和a[j+1]两两比较交换,最后次大数放到a[8]中

然后i++,继续...

当i=9时已经过9次两两比较完成所有排序,i<9不再成立退出比较。

对于n个数,只需要进行n-1次外循环的两两比较就完成排序。

至于按降序排列只需将if(a[j]>a[j+1])改为if(a[j]

/* 用改进型冒泡排序法对一维整型数组中的十个数升序排序 */

#include

int main()

{int i,j,t,a[10],flag;

printf("Please input 10 integers:\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=0;i<9;i++) /* 改进型冒泡法排序 */

{ flag=0;

for(j=0;j<10-i-1;j++)

if(a[j]>a[j+1])

{ t=a[j]; /* 交换a[i]和a[j] */

a[j]=a[j+1];

a[j+1]=t;

flag=1;

}

if(flag==0)break;

}

printf("The sequence after sort is:\n");

for(i=0;i<10;i++)

printf("%-5d",a[i]);

printf("\n");

system("pause");

return 0;

}

这个和上面的实质一样,只是加了一个标志flag,当在一次大循环(即外层循环)内,在内层循环中如果 没有发生一次交换,那么就表示a[0]

C语言冒泡排序

#include

void sort(int a[],int n)

{

int i,j,small,temp;

for(i=0;i

{

small=i;

for(j=i+1;j

{

if(a[j]

small=j;

if(small!=i)

{

temp=a[i];

a[i]=a[small];

a[small]=temp;

}

}

void main()

{

int a[]={2,3,4,12,5};

int n=5;

sort(a,n);

for(i=0;i

{

printf("%d ",a[i]); )

}

}

}

}

#include

void sort(int a[],int n)

{

int i,j,small,temp;

for(i=0;i

{

small=i;

for(j=i+1;j

{

if(a[j]

small=j;

if(small!=i)

{

temp=a[i];

a[i]=a[small];

a[small]=temp;

}

}

}

}

void main()

{

int a[]={2,3,4,12,5};

int n=5;

sort(a,n);

for(i=0;i

{

printf("%d ",a[i]);

}

}

刚才括号有点问题

延伸阅读:

C中冒泡排序的算法思想private void bubble_sort(int[] a, int size) { bool flag = true; int temp = 0; /* Temporary value for swapping two elements */ for (int i = 0; i { flag = true; f...

冒泡法和选择法排序的思想冒泡和快速排序的区别在于:冒泡算法,每次比较如果发现较小的元素在后面,就交换两个相邻的元素。将待排序的元素看作是竖着排列的"气泡",较小的元素比较轻,从而要往上浮。在冒泡排序...

C冒泡排序的基本思想和步骤冒泡排序顾名思义就是大的下沉,小的上浮,当然,可以扩展为小的下沉,大的上浮 比如有以下数据 源数据 B E D C A 第一轮 B D C A E 第二轮 B C A D E 第三轮 B A C D E 第四轮 A B...

具体要求: 1熟悉和了解冒泡排序的算法思想和基本理论并通过//flag为标记位 void bubble_sort(int array[],int n) { int i,j,flag,temp; for (i = 0; i { flag = 1; for (j = 0; j { if (array[j] >array[j+1]) { temp= array[j]; ar...

C语言冒泡排序法的详细注释/* 用冒泡排序法对一维整型数组中的十个数升序排序 */ #include <stdio.h> int main() {int i,j,t,a[10]; printf("Please input 10 integers:\n"); for(i=0;i<10;i++) scanf(...

用c语言表达起泡排序算法的核心思想冒泡排序法的基本思想是: 第一:在a[0]到a[N-1]的范围内,依次比较两个相邻元素的值, 若a[J]>a[J+1],则交换a[J]与a[J+1],J的值取0,1,2,……,N-2;经过这样一趟冒泡,就把这N个数中最大的...

链式基数排序的算法思想C语言越多越仔细越好参考 /* 基数排序的算法源程序*/ #include#define D 3 /* D为排序码的最大位数 */ #define R 10 /* R为基数 */ typedef int KeyType; typedef int DataType; struct Node; /...

司法考试各个法的分值排序是什么样的关于司法考试卷一 纵观历年司考,个人认为卷一不存在难度问题,考生之所以本卷未得高分,原因在于被本卷的广度难倒。而对付这种“广在天边,细如针尖”的司考题,我们的备考也要针锋...

求计算机机房管理C语言程序/* Note:Your choice is C IDE */ #include "stdio.h" #include <time.h> #define N 60 int k=1; int i; time_t rawtime; time_t rawtime1; struct tm * timeinfo1; struct a...

推荐阅读
图文推荐
栏目列表