起泡法排序

作者&投稿:堵扶 (若有异议请与网页底部的电邮联系)
c++起泡法排序~

冒泡排序详细注释:
/* 用冒泡排序法对一维整型数组中的十个数升序排序 */
#include
#include

int main()
{
int i,j,t,a[10];
printf("Please input 10 integers:
");
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:
");
for(i=0;i<10;i++)
printf("%-5d",a[i]);
printf("
");
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]<a[j+1])即可。

-------------------------------------------------------------------
/* 用改进型冒泡排序法对一维整型数组中的十个数升序排序 */
#include
#include
int main()
{int i,j,t,a[10],flag;
printf("Please input 10 integers:
");
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:
");
for(i=0;i<10;i++)
printf("%-5d",a[i]);
printf("
");
system("pause");
return 0;
}
这个和上面的实质一样,只是加了一个标志flag,当在一次大循环(即外层循环)内,在内层循环中如果 没有发生一次交换,那么就表示a[0]<a[1]<a[2]<a[3]<a[4]<a[5]<a[6]<a[7]<a[8]<a[9],即数组已经排序完成,此时直接退出循环,不用再比较了。

#include "stdio.h" void sort(char str[]); main() { char str[10]; int i; for(i=0;istr[i+1]) { t=str[i]; str[i]=str[i+1]; str[i+1]=t; } } }

1.起泡排序算法的原理 起泡排序是交换排序的一种,其基本方法是:设待排序元素列中元素...
2.起泡排序的基本算法
3.template<classT>
4.voidBubbleSort(T arr[],intn){
5.起泡排序的时间复杂度分析 起泡排序算法中,第i趟起泡需要执行n-i次比较和交换操作。因此,i从1到n-1,执行的比较操作的次数为: (n-1)+(n-2)+ …...

测天绘地2013
关注
排序算法之起泡排序(冒泡排序) 原创
2018-05-09 22:35:51
11点赞

测天绘地2013

码龄4年

关注
1. 起泡排序算法的原理
起泡排序是交换排序的一种,其基本方法是:设待排序元素列中元素的个数为n,首先比较下标为n-2和n-1个元素,如果发生逆序(及前一个大于后一个),则将这两个元素交换;然后对下标为n-3和n-2的元素做同样的处理;重复此过程直到处理完下标为0和1的元素。这称之为一趟起泡,结果将最小的元素交换到待排序元素序列的第一个位置,其他元素也都向最终排序的方向移动。当然在个别情形下,元素有可能在排序中途向相反的方向移动(两元素相等时,不稳定排序,如图一中的25和25*)。氮元素移动总趋势是向最终位置移动。正因为每一趟起泡排序酒吧一个排序码小的元素前移到最后应在的位置,所以叫做起泡排序。这样最多做n-1趟起泡就能把所有元素排好序。

图一:冒泡排序法示意图

2. 起泡排序的基本算法
从排序的执行过程中可以看到基本的起泡排序的数据比较次数与输入序列中各待排序的数据比较次数与输入序列中各待排序元素的初始排序无关,但数据的交换次数与各待排序元素的初始排序有关,他与逆序的发生有关,最好的情况一次都不需要排序,最差的每一次都需要交换。

4. 起泡排序的改进算法
这里可以对起泡排序算法进行改进。具体到某一个待排序元素序列是可能不需要n-1趟起泡就能全部排好序。为此,可以在算法中增加一个标志exchange,用以标识本趟起泡结果是否发生了逆序和交换,如果没有发生交换,则exchange = false,表示全部元素已经排好序,因而就可以停止处理;如果exchange = true,表示本趟有元素发生交换,还需要执行下一次起泡排序。起泡排序算法的改进算法如下:

template<class T>
void BubbleSort(T arr[], int n) {
bool exchange; //标识本次是否发生交换
for (int i = 1; i < n; i++) { //共进行n - 1趟排序:从1到n-1,逐步缩小待排序列
exchange = false; //每趟起泡之前将exchange赋值false
for (int j = n - 1; j >= i; j--) { //反向检测,检查是否逆序
if(arr[j] > arr[j - 1]){ //发生逆序,交换元素的位置


什么是冒泡法?
冒泡法是一种简单的排序算法,通过相邻元素之间的比较和交换来实现排序。它的核心思想是从第一个元素开始,逐一比较相邻的元素,如果它们的顺序不对就进行交换。这样一轮下来,最大的元素就会像气泡一样“冒”到数列的最后面。然后再从第一个元素开始,重复这个过程,直到整个数列都有序为止。...

冒泡法怎么对10个数由小到大进行排序?
冒泡法排序原理:例如有一组数为12,23,1,4,2,6。使用冒泡排序方法使这组数从小到大排列。首先12和23比较,12<23,则位置不变;接着23和1比较,因为23>1,所以交换23和1的位置,这组数这时是12123426;然后比较23和4,因为23>4,所以交换23和4,这组数变为12142326;然后比较23和2,23>2,...

冒泡法排序
冒泡法排序如下:冒泡法排序它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列...

什么是冒泡法?
冒泡法也就是冒泡排序,是一种计算机科学领域的较简单的排序算法。冒泡排序也就是需要重复地走访过要排序的元素列,然后挨个比较两个相邻的元素,如果他们的顺序出现错误的情况就可以把他们交换过来。

用冒泡排序法排列10个数据,程序是怎样的?
采用冒泡法降序排列10个输入数据的程序如下:先定义一个长度为10的数组a[],10个数据由键盘输入,从第一个数开始,两两一组进行判断,因为要求是降序排列,因此将两个数中小的向后移动,每个数要比较的次数为9-数的下标。比较完成后将数组依次输出。输入10个数据,程序运行结果:...

冒泡排序法是如何排序的???
冒泡排序算法的原理如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字...

冒泡法10个整数从小到大如何排序?
冒泡法10个整数从小到大排序思路如下:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序...

起泡法排序
起泡法排序如下:起泡排序算法的原理 起泡排序是交换排序的一种,其基本方法是:设待排序元素列中元素...起泡排序的基本算法;template<classT>;voidBubbleSort(T arr[],intn){起泡排序的时间复杂度分析 起泡排序算法中,第i趟起泡需要执行n-i次比较和交换操作。因此,i从1到n-1,执行的比较操作的次数...

数学中有一种排列数字的方法叫冒泡法,可不可以举个例子,到底什么意思...
2和5比不动 成 2 5 3 1 5和3比交换 成 2 3 5 1 5和1比交换 成 2 3 1 5 第二轮 2和3比不动 成 2 3 1 5 3和1比交换 成 2 1 3 5 第三轮 2和1比交换 成 1 2 3 5 这样排序就完成了 因为是一轮是找到一个最大(小)的数 就像冒泡泡一样,所以叫冒泡法 ...

对N个元素进行排序,用冒泡法进行排序时,共需排几次?
最好情况需比较n-1次,最坏情况需比较(n-1)\/2。冒泡排序基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。直观表达,每一趟遍历,将一个最大的数移到序列末尾。基本步骤:1、外循环是遍历每个元素,每次...

凤冈县13273564423: 试题 ( 用起泡法对几个数同小到大排序,即将相邻的两个数比较将小的调以前头. -
邗胥对氨:[答案] 起泡法是从一端开始比较的,第一次循环就是把最小数上升到第一位置,第二次循环就是把第二最小数上升到第二位置.如此循环实现数据的排序.下面举一个用起泡法对n个数字进行排序的例子: #include void main() { int a[100]; int n,i,j,t; printf("请...

凤冈县13273564423: 写一个函数用起泡法对输入的十个字符由小到大排列 -
邗胥对氨: #include <stdio.h>#include <stdlib.h> void sort(char s[], int n); //定义排序函数 int main() { char str[11]; printf("Please enter 10 charactor: "); //输入10个字符 gets(str); sort(str, 10); //调用排序函数 system("pause"); return 0; }//排序函数(...

凤冈县13273564423: C++语言程序 用起泡法对10个数从大到小排序 -
邗胥对氨: 给你个全的: #include void main() {double a[15],temp;int i,j;cout< for(i=0;i<10;i++){cin>>a[i];}for(i=0;i<10;i++)for(j=i;j<10;j++){if(a[i]<=a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}cout< for(i=0;i<10;i++){cout< } }

凤冈县13273564423: 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("%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]...

凤冈县13273564423: 什么是冒泡排序法? -
邗胥对氨: 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法...

凤冈县13273564423: 编写程序:用起泡法对任意10个整数按照由大到小排序. -
邗胥对氨: #include void main() { int a[10],i,j,k;cout>a[i];for (j=0;j for (i=0;i if (a[i]>a[i+1]){ k=a[i]; a[i]=a[i+1]; a[i+1]=k; } cout#include void main() { int a[10],i,j,k; couta[i]; for (j=0;ja[i+1]) { k=a[i]; a[i]=a[i+1]; a[i+1]=k; } cout

凤冈县13273564423: 用起泡法对10个数排序? -
邗胥对氨: #include <stdio.h> void main() { int i, n=10, j, m; int a[]={210,108,65,49,72,88,67,5,19,36}; printf("\nThese integers are as below:\n\n"); for (i=0; i<n; i++) { printf("%6d",a[i]); if ((i+1)%10==0) printf("\n"); } for (i=1; i<n; i++) { for (j=0; j<n-i; j++) { if ...

凤冈县13273564423: c语言程序 用起泡法对20个数进行排序 从大到小 -
邗胥对氨: int i=0,j,temp; while(i++{ for(j=1;jif(a[j]>a[j-1]) {temp=a[j];a[j]=a[j-1];a[j-1]=temp;} }

凤冈县13273564423: 用起泡法对数组中15个实数进行排序 -
邗胥对氨: 代码如下: #include <stdio.h> void main() { int a[15]; int i, j, t; printf("input 15 numbers:\n"); for (i = 0; i < 15; i++) scanf("%d", &a[i]); printf("*************************************************\n"); for(j = 15; j > 0; j--) { for(i = 0; i < j - 1; i++) if (a[i] > a[i + ...

凤冈县13273564423: 求关于c语言 冒泡排序法的讲解 -
邗胥对氨: 冒泡排序法是简单的排序方法之一,它和气泡从水中往上冒的情况有 些类似.其具体做法是(1)对于数组a中的1至n个数据,先将第n个和第n-1个数据进行比较,如果 a(n)<a(n-1),则两个数交换位置. 然后比较第n-1个和第n-2个数据;依次...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网