C语言的“冒泡排序”怎么做?sort(str)什么意思?

作者&投稿:甘琰 (若有异议请与网页底部的电邮联系)
关于冒泡排序法,以及array.sort方法的问题~

1.
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序
n个数,第1轮,比较n-1次,得到最大(或最小)数
余下的n-1个数,比较n-2次,得到排第二位的数
以此此类推,最后比较1次,确定最后两个数的大小
故总循环次数:1+2+...+n-1=(1+n-1)(n-1)/2=n(n-1)/2
因为冒泡排序是采用双重循环,因此时间复杂度为O(n^2);

2.Arrays.sort()方法根据传出参数的长度的大小来判断用哪种排序方法,如果数组的长度小于7用冒泡排序,如果数组长度大于7,将数组分为两部分,前半部分和后半部分分别进行冒泡排序,最后再执行一次总的排序

冒泡排序每一趟排序把最大的放在最右边。
比如:
87 12 56 45 78
87和12交换:12 87 56 45 78
87和56交换: 56 87 45 78
87和45交换: 45 87 78
87和78交换: 78 87
到此第一趟排序结束,接下来的每一趟排序都是这样。
#includevoid Print(int *num, int n){ int i; for(i = 0; i num[j + 1]) { int temp = num[j]; num[j] = num[j + 1]; num[j + 1] = temp; } Print(num, n); } } return;}int main(){ int num[8] = {87, 12, 56, 45, 78}; Bubble_Sort(num, 5); return 0;}

对于冒泡:
可以这样考虑
外层循环式控制一共有多少个泡需要排序, 这个当然要用循环

内层循环控制把某一个泡放到正确的位置, 这个也要用循环, 因为这个泡要和所有未排序泡比较一遍, 然后才能知道自己应该处的位置

这里有两个点,明白了的话,这道题就明白了
1. 外层循环: 仅仅控制一共有多少个泡需要排序, 比如代码中a[10], 一共是10个元素
2. 内层循环: 仅仅控制把当前最大的泡放到最后, 也就是一次内层循环,仅仅把最大的那个泡放到最后了而已

把1和2综合起来看
当j=0时,把a数组10个元素中最大的泡放到最后
当j=1时,把a数组10个元素中第二大的元素放到倒数第二个位置
依次类推..直到第10大的元素,即最小的元素放到正数第一个位置

楼主可以这样测试一下,会更加清晰,把第一个循环去掉, 内层循环改为:
for(i=0; i< 10; i++) 相当于仅执行上述j=0的一次内层循环, 这个循环的作用是把最大的元素放到最后

在解释下内层循环为什么是 i<10-j 其实这个不难理解
当j=0时, 相当于 for(i=0;i<10;i++) 也就是遍历所有元素,把最大的放到最后
当j=1时, 相当于 for(i=0;i<9;i++) 这次仅仅遍历前9个元素,把前9个元素中最大的放到第九个位置, 因为第10个位置已经是最大的了,不用再次比较了.

如果实在是对嵌套循环理解不了,还有个简单的办法,把外层循环解开:
也就是可以这么写:
//----------------------------------------
for(i=0;i<10;i++) //等价于j=0
if (a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}

for(i=0;i<9;i++) //等价于j=1
if (a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
...//同上,仅仅是把i<后面的值递减,直到
for(i=0;i<1;i++) //等价于j=9
if (a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}

上面这一系列代码,等价于原来的双层嵌套循环
sort(str) 就是用户自定义的冒泡排序函数的函数名,str作为函数参数

sort是C++数学库中的函数,用来升序排列,sort(str)就是把str数组中的元素升序排列

对于冒泡:
可以这样考虑
外层循环式控制一共有多少个泡需要排序,
这个当然要用循环
内层循环控制把某一个泡放到正确的位置,
这个也要用循环,
因为这个泡要和所有未排序泡比较一遍,
然后才能知道自己应该处的位置
这里有两个点,明白了的话,这道题就明白了
1.
外层循环:
仅仅控制一共有多少个泡需要排序,
比如代码中a[10],
一共是10个元素
2.
内层循环:
仅仅控制把当前最大的泡放到最后,
也就是一次内层循环,仅仅把最大的那个泡放到最后了而已
把1和2综合起来看
当j=0时,把a数组10个元素中最大的泡放到最后
当j=1时,把a数组10个元素中第二大的元素放到倒数第二个位置
依次类推..直到第10大的元素,即最小的元素放到正数第一个位置
楼主可以这样测试一下,会更加清晰,把第一个循环去掉,
内层循环改为:
for(i=0;
i<
10;
i++)
相当于仅执行上述j=0的一次内层循环,
这个循环的作用是把最大的元素放到最后
在解释下内层循环为什么是
i<10-j
其实这个不难理解
当j=0时,
相当于
for(i=0;i<10;i++)
也就是遍历所有元素,把最大的放到最后
当j=1时,
相当于
for(i=0;i<9;i++)
这次仅仅遍历前9个元素,把前9个元素中最大的放到第九个位置,
因为第10个位置已经是最大的了,不用再次比较了.
如果实在是对嵌套循环理解不了,还有个简单的办法,把外层循环解开:
也就是可以这么写:
//----------------------------------------
for(i=0;i<10;i++)
//等价于j=0
if
(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
for(i=0;i<9;i++)
//等价于j=1
if
(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
...//同上,仅仅是把i<后面的值递减,直到
for(i=0;i<1;i++)
//等价于j=9
if
(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
上面这一系列代码,等价于原来的双层嵌套循环
sort(str)
就是用户自定义的冒泡排序函数的函数名,str作为函数参数

对于冒泡:
可以这样考虑
外层循环式控制一共有多少个泡需要排序,
这个当然要用循环
内层循环控制把某一个泡放到正确的位置,
这个也要用循环,
因为这个泡要和所有未排序泡比较一遍,
然后才能知道自己应该处的位置
这里有两个点,明白了的话,这道题就明白了
1.
外层循环:
仅仅控制一共有多少个泡需要排序,
比如代码中a[10],
一共是10个元素
2.
内层循环:
仅仅控制把当前最大的泡放到最后,
也就是一次内层循环,仅仅把最大的那个泡放到最后了而已
把1和2综合起来看
当j=0时,把a数组10个元素中最大的泡放到最后
当j=1时,把a数组10个元素中第二大的元素放到倒数第二个位置
依次类推..直到第10大的元素,即最小的元素放到正数第一个位置
楼主可以这样测试一下,会更加清晰,把第一个循环去掉,
内层循环改为:
for(i=0;
i<
10;
i++)
相当于仅执行上述j=0的一次内层循环,
这个循环的作用是把最大的元素放到最后
在解释下内层循环为什么是
i<10-j
其实这个不难理解
当j=0时,
相当于
for(i=0;i<10;i++)
也就是遍历所有元素,把最大的放到最后
当j=1时,
相当于
for(i=0;i<9;i++)
这次仅仅遍历前9个元素,把前9个元素中最大的放到第九个位置,
因为第10个位置已经是最大的了,不用再次比较了.
如果实在是对嵌套循环理解不了,还有个简单的办法,把外层循环解开:
也就是可以这么写:
//----------------------------------------
for(i=0;i<10;i++)
//等价于j=0
if
(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
for(i=0;i<9;i++)
//等价于j=1
if
(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
...//同上,仅仅是把i<后面的值递减,直到
for(i=0;i<1;i++)
//等价于j=9
if
(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
上面这一系列代码,等价于原来的双层嵌套循环
sort(str)
就是用户自定义的冒泡排序函数的函数名,str作为函数参数


C语言冒泡排序法是怎么排序的?
C语言冒泡排序法的排序规则:将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。初始 R[1..n]为...

C语言的冒泡排序是什么?求解释
你好,很高兴为你解答 所谓冒泡排序即:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数...

冒泡排序法C语言解释。
冒泡排序是一种最简单的排序方法,通过比较相邻的元素,若发生倒序,则交换,使最大值沉到最后。其空间复杂度为O(1),时间复杂度为O(n2)。冒泡排序是一种稳定的排序。用于顺序或者链式存储结构,平均时间性能比直接插入差。当初始记录无序且n较大时,不宜采用此方法。顺序表创建。冒泡排序算法。初始...

c语言怎么做冒泡排序啊?
使用冒泡排序法进行编程:解释:1.第一个for循环:利用数组循环输入4个变量。2.第二个for循环:该循环的意思是如果a[0]>a[1]的话,两个变量的值交换,利用循环依次比较。要注意的是i<3,因为其中有i+1,i最大取到2,也就是i+1最大取到3才正确。3.第三个for循环:利用循环依次输出排序后的...

c语言冒泡排序详解
冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。以从小到大排序为例,第一轮比较后,...

c语言中冒泡法是什么意思?
至于为什么叫冒泡法呢,你把这几个数字竖起来看 1 2 3 4 5 把最大的数字5看成最大的泡泡,浮到最上,然后4又浮上去,依此类推 得到 5 4 3 2 1 所以形象的称为冒泡法 ———以下是C语言中十个数的冒泡法排序的代码 include<stdio.h> include<conio.h> int main(void){ long arrary[9...

C语言冒泡排序加解题思路?
冒泡排序,就是对一组数进行逐趟排序的方法,具体分为升序和降序。以升序为例。每一趟的任务,就是从一组数的第一个数开始,依次比较相邻的两个数的大小。既然是升序,那么比较后,如果前者大于后者,那么两者交换位置。就这样依次地比下去。这样的话,第一趟就把最大的数排到了最后。而每再比较...

冒泡排序是什么意思?
问题四:冒泡排序法C语言解释 100分 既然要用外行的话来回答,我就打个简单的比喻吧。【比喻】假如你是体育老师,你前面有一排随机站立的学生,10个,高矮不一。如果你要用冒泡排序的思路来让他们从低到高来排队,你可以这样。第一遍:从左往右,第一个跟第二个比较,高的那么换到右边,接着第2...

c语言排序的方法
排序主要分为以下几种。1.冒泡排序:通过循环比较前后数的大小进行交换。最后使得数组有序。2.快速排序:首先将第一个数作为一个基准,然后循环,将前半部分大于该数的与后半部分小于该数的进行交换,使得以该数为分界线,前面的小于该数,后面的大于该数,然后分前后两部分继续。

求关于c语言 冒泡排序法的讲解
冒泡排序法是简单的排序方法之一,它和气泡从水中往上冒的情况有 些类似。其具体做法是 (1)对于数组a中的1至n个数据,先将第n个和第n-1个数据进行比较,如果 a(n)

浮梁县17877295473: C语言冒泡排序法 -
仇由翟娃娃: 冒泡排序每一趟排序把最大的放在最右边. 比如: 87 12 56 45 78 87和12交换:12 87 56 45 78 87和56交换: 56 87 45 78 87和45交换: 45 87 78 87和78交换: 78 87 到此第一趟排序结束,接下来的每一趟排序都是这样.1 2 3 4 5 6 7 8 9 ...

浮梁县17877295473: C语言 动态链表结构体 用冒泡法排序 该怎么搞?
仇由翟娃娃: 冒泡排序: main() { int a[10] = {2,3,1,3,5,6,4,8,7,9}; for(int i=0;i<10-1;i++) { for(int j = i+1;j<10;j++) { if(a[i]<a[j]) { int t =0; t=a[i]; a[i] = a[j]; a[j] = t; } } } }//自己拿去改改

浮梁县17877295473: C语言冒泡排序. -
仇由翟娃娃: main() { int i,j,temp; int a[10]; for(i=0;i<10;i++) scanf ("%d,",&a[i]); for(j=0;j<=9;j++) { for (i=0;i<10-j;i++) if (a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp;} } for(i=1;i<11;i++) printf("%5d,",a[i] ); printf("\n"); } -------------- 冒泡算法 冒泡排序的算...

浮梁县17877295473: C语言:给出已知数组,对其进行排序,用冒泡排序如何做? -
仇由翟娃娃: #include <stdio.h> void sort(int a[],int n) {int i,j,t; for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++) if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} } int main(void) { int a[1000]; //假设已有数据 sort(a,1000); for(i=0;i<1000;i++) printf("%d ",a[i]); printf("\n"); return 0 ; }

浮梁县17877295473: 求大神给我说一下C语言链表用冒泡排序怎么写啊? -
仇由翟娃娃: 1、交换链表中各节点的数据,不交换节点;2、交换节点,即节点link指针的内容.下面以第一种思路为例:void sort(LinkList *L) { int i,j,t; LinkList *p = L; int count = 0; while(p->link != NULL) { count++; p = p->link; } for(i=0;i { p = L; for(j=0;j { if(p->data > p->link->data) { t=p->data; p->data = p->link->data; p->link->data=t; } p = p->link; } } }

浮梁县17877295473: 用C语言的函数做冒泡法排序 -
仇由翟娃娃: #include#define M 10 void Bubble(int a[]) { int t; for(int i=0;i for(int j=i+1;j if(a[j]>a[i]) { t=a[j]; a[j]=a[i]; a[i]=t; } for(i=0;i cout} void main() { int a[M]; for(int i=0;i cin>>a[i]; Bubble(a); }

浮梁县17877295473: C语言中,用有参函数和数组,做冒泡排序怎么做(不用指针) 例如输入十个数 求大神代码 -
仇由翟娃娃: 冒泡的函数 void sort(int arr[],int size){ int i=0,j=0; for(;i<size;i++) for(j=i;j<size;j++) if(arr[i]<arr[j]){ int t=arr[i]; arr[i]=arr[j]; arr[j]=t; } }

浮梁县17877295473: c语言中用冒泡排序法排列任意输入的10个数,用程序输出从小到大的排列具体过程,谢谢.. -
仇由翟娃娃: #include<stdio.h> void main() { int a[10]; int i,j,t; printf("input 10 numbers :\n"); for (i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++)for(i=0;i<9;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("the sorted numbers:\n");for(...

浮梁县17877295473: 使用C语言冒泡排序做
仇由翟娃娃: 可以参考一下:#include<stdio.h>main() printf("The sorted numbers:\n"); for(i=0;i<10;i++) printf("%5d",a[i]);}

浮梁县17877295473: C语言的“冒泡排序”怎么做?sort(str)什么意思? -
仇由翟娃娃: 对于冒泡:可以这样考虑 外层循环式控制一共有多少个泡需要排序, 这个当然要用循环 内层循环控制把某一个泡放到正确的位置, 这个也要用循环, 因为这个泡要和所有未排序泡比较一遍, 然后才能知道自己应该处的位置 这里有两个点,明...

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