为什么冒泡排序最坏情况下,每次比较都必须移动元素三次来交换元素位置?
你的问题中移动记录三次是指什么?
下面是C语言的冒泡排序典型代码
void bubble_sort(int a[], int n){ int i, j, temp; for (j = 0; j a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } }}这里是升序排序,将相邻两个数,大的往后移动,每次比较也只是一次移动。
你这里三次是指先将temp值记录a[i],然后用a[i+1]覆盖a[i]的值,然后用temp值覆盖a[i+1]的值?
交换一般都是这样写的。
冒泡排序算法的原理如下:
1,比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2,对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3,针对所有的元素重复以上的步骤,除了最后一个。
4,持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
扩展资料:
冒泡排序算法分析:
1,时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数 和记录移动次数
均达到最小值: , 。所以,冒泡排序最好的时间复杂度为 。 若初始文件是反序的,需要进行 趟排序。每趟排序要进行
次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
冒泡排序的最坏时间复杂度为 。综上,因此冒泡排序总的平均时间复杂度为 。
2,算法稳定性:
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。
所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
参考资料:百度百科----冒泡排序
这样,每冒泡一次就要所有数据都移动一次。而每移动一次就要使用交换操作。
建议画图理解一下这个算法的运行步骤
冒泡排序最好情况下比较次数
O(n)。根据知乎查询显示,冒泡排序在最好情况下的比较次数是O(n),其中n是待排序的元素个数。在最好情况下,冒泡排序每次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。最坏的情况是每次比较都需要进行元素交换,即比较次数等于交换次数。冒泡排序的时间复杂度为O(n^2),其中n是待排序的...
VB中的冒泡排序在最坏情况下的比较次数是n(n-1)\/2 为什么?什么是最坏...
而冒泡法排序时,并不是每次比较都要交换数据的位置,只有在两个数的大小跟要排的大小顺序相矛盾时,才产生交换动作,所以,尽管排序时比较了n(n-1)\/2次,一般并不会交换n(n-1)\/2次,而是少于n(n-1)\/2次,只有在最坏的情况下才会交换n(n-1)\/2次。这个最坏情况是指,假如要把一组...
为什么冒泡排序最坏情况下比较次数都是n(n
是n(n-1)\/2吧,,最坏的情况下数组刚好和要排的顺序逆序,从第二个元素开始每一个元素都要和前面所有的元素比较,比较次数分别为1,2,3,...,n-1,加起来就是n(n-1)\/2
时间复杂度为O(n^2)的几种排序
在冒泡排序中,只有交换才可以改变两个元素的前后顺序。为了保证冒泡排序算法的稳定性,当有相邻的两个元素大小相等的时候,我们不做交换,相同大小的数据在排序前后不会改变顺序,所以冒泡排序是稳定的排序算法。时间复杂度(执行最多的单元执行的次数)。最佳情况:T(n) = O(n) 最差情况:T(n) ...
对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正...
【答案】:D 冒泡排序法首先将第一个记录的关键字与第二个记录的关键字进行比较,若逆序则交换,然后比较第二个与第三个,以此类推,直至第n-1个与第n个记录的关键字进行比较。在最坏情况下,冒泡排序中,若初始序列为”逆序”序列,需要比较n(n-1)\/2次。快速排序是对通过-趟排序将待排记录...
冒泡排序时间复杂度
我啰嗦两句,从头讲起。冒泡排序是一种用时间换空间的排序方法,最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序。在这种情况下,每一次比较都需要进行交换运算。举个例子来说,一个数列 5 4 3 2 1 进行冒泡升序排列,第一次大循环从第一个数(5)开始到倒数第二个数(2)结束,比较...
VB中的冒泡排序在最坏情况下的比较次数是n(n-1)\/2 为什么?什么是最坏...
1.比如把5个任意不同数字按大到小排序 (54312)-->1次交换就可以达到,但我们程序中要考虑所有情况的,就是所谓的最坏打算...为了保证交换有效,肯定要做最坏打算的.(如果最坏打算都可以达到,就能满足所有情况了)如果有N个数字排序 我们首先拿第一位置排序和其他所有位置比较,要比较N-1次.第二个数...
对n个元素进行排序,用冒泡法进行排序时,共需比较多少次
冒泡排序:最好情况需比较n-1次,最坏情况需比较n(n-1)\/2;选择排序:最好情况需比较n(n-1)\/2,最坏情况需比较n(n-1)\/2;对分排序:最好情况需比较n\/2logn,最坏情况需比较近似nlogn;根据算法本身,通过计算迭代次数,或建立递推方程求解 ...
对n个元素进行排序,用冒泡法进行排序时,共需比较多少次
是否也有公式问题补充:对n个元素进行排序,用冒泡法进行排序时,共需比较冒泡排序:最好情况需比较n-1次,最坏情况需比较n(n-1)\/2;选择排序
稳定排序算法
每次取无序区间的第一个值向前比较然后插入,插入位置以后的元素下标后移1。最坏情况下: 时间复杂度为O(n^2) 无序的时候。最好情况下: 时间复杂度为O(n) 有序的时候。空间复杂的为O(1)。越有序越快。2、冒泡排序 冒泡排序的原理:依次比较相邻下标的两位的数值,然后进行排序,每一躺确定一...
赏军天蟾:[答案] 冒泡排序如1,2,3,4最好的情况是按完全升级排列,最坏就是数字完全按降序排列:第一次是1:然后1和2,3,4第2次:2:比较谁比它小交换,于是2.和34交换,答案是3421第3次为3:3和4交换机最后是4321;这就是最坏情况下的次数3...
漳县15815036028: 下列排序方法中,最坏情况下比较次数最少的是()为什么 ?A)冒泡排序 B)简单选择排序 C)直接插入排序 D)堆 - ?
赏军天蟾: 最坏情况下:直接选择排序:每次都要执行交换,总移动次数为(n-1)次交换 O(n)冒泡排序:每比较一次都要进行一次交换 ,移动次数为 3n(n-1)/2 O(n2)直接插入排序:n2/4 O(n2)堆排序: O(nlog2n)所以,应该选D
漳县15815036028: VB中的冒泡排序在最坏情况下的比较次数是n(n - 1)/2 为什么?什么是最坏的情况? - ?
赏军天蟾: 1.比如把5个任意不同数字按大到小排序(54312)-->1次交换就可以达到,但我们程序中要考虑所有情况的,就是所谓的最坏打算...为了保证交换有效,肯定要做最坏打算的.(如果最坏打算都可以达到,就能满足所有情况了) 如果有N个数字排...
漳县15815036028: 请问冒泡法与选择法的区别在哪啊???
赏军天蟾: 选择法是逻辑最简单的排序方法,在元素很少的时候速度是最快的.缺点是比较次数必然是 N ^ 2 / 2(因为每次都得挨个比较一次,找出最值位置) 冒泡只有最坏的情况下才会有 N ^ 2 / 2的比较次数(因为一般情况下在中途就会排好),但是交换次数比选择法多(因为是相邻数据交换,不是直接到位).选择法交换次数最坏情况下是N - 1;冒泡则是 N ^ 2 / 2. 实际处理选择法用得比较多,冒泡是一种高不成地不就的算法.数据多的时候平均处理时间虽然比选择短,但是会比快速排序之类的O(N * logN)的算法慢得多
漳县15815036028: C语言中冒泡排序在最坏情况下的比较次数是什么 - ?
赏军天蟾: 比较次数是固定的,交换次数会有最好情况和最坏情况
漳县15815036028: 下面的排方法中,最坏的情况下比较次数最少的是( ) A冒泡排序 B简单选择排序 C直接插入排序 D 堆排序并帮我解释一下为什么原因,分别在最坏的情况... - ?
赏军天蟾:[答案] 从原理上给你推导下:1.冒泡法:这是最原始,也是众所周知的最慢的算法了.他的名字的由来因为它的工作看来象是冒泡:#include void BubbleSort(int* pData,int Count) { int iTemp; for(int i=1;i =i;j--) { if(pData...
漳县15815036028: 冒泡排序时间复杂度冒泡排序在最坏的情况下的比较次数是O(N^2) 怎么有的就写冒泡排序在最坏情况下的比较次数是n(n - 1)/2一头雾水 - ?
赏军天蟾:[答案] 我啰嗦两句,从头讲起.冒泡排序是一种用时间换空间的排序方法,最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序.在这种情况下,每一次比较都需要进行交换运算.举个例子来说,一个数列 5 4 3 2 1 进行...
漳县15815036028: 下列排序方法中,最坏情况下比较次数最少的是()为什么 A)冒泡排序 B)简单选择排序 C)直接插入排序 D)堆 - ?
赏军天蟾:[答案] 最坏情况下:直接选择排序:每次都要执行交换,总移动次数为(n-1)次交换 O(n) 冒泡排序:每比较一次都要进行一次交换 ,移动次数为 3n(n-1)/2 O(n2) 直接插入排序:n2/4 O(...
漳县15815036028: 冒泡排序法在最坏的情况下的比较次数是n(n - 1)/2,快速排序呢它不是据说是冒泡排序的优化版么… - ?
赏军天蟾:[答案] 快速排序的时间复杂度 最坏为n*(n-1)/2 最好为n*logn 不同的结果和用于划分的key大小有关: 最坏情况发生在每次划分过程产生的两个区间分别包含n-1个元素和1个元素的时候; 最好情况是每次划分过程产生的区间大小都为n/2 . 数据结构里说的很...
漳县15815036028: 冒泡排序法 - ?
赏军天蟾: 用冒泡排序法对n个关键码排序,在最好的情况下也就是数据按关键码排序次序有序,只需要依次从头到尾挨个比较就可以了,因此比较次数为n-1次,关键码不移动,所以0次移动 在最坏的情况下为关键码按排序顺序完全逆序,第k趟都有n-k个关键码比较,因此数据一共要做n*(n-1)/2次比较,移动次数则为3n*(n-1)/2 这样就是错误A