冒泡排序法给五个数排序(双向冒泡排序和快速排序)

生活常识 2023-04-19 18:20生活常识www.baidianfengw.cn

教你理解冒泡排序。 五十四、最基础的冒泡排序

「@Author Runsen」

排序可能是所有的算法中最最基础和最最常用的了。排序是一个非常经典的问题,它以一定的顺序对一个数组(或一个列表)中的项进行重新排序。

排序算法有很多种,每个都有其自身的优点和局限性。

今天白癜风网小编我们来学习最最简单的冒泡排序算法。

冒泡排序

要学习冒泡排序必须知道它的原理

所谓冒泡,就是将元素两两之间进行比较,谁大就往后移动,直到将更大的元素排到面,接着再循环一趟,从头开始进行两两比较,而上一趟已经排好的那个元素就不用进行比较了。

下面,我们就进入代码环节。

Python实现冒泡排序 现在,我给你一个nums = [3,1,25,6,8,10,15],要求你用Python将nums实现冒泡排序。

看上去很难入手,其实很简单,我先给出代码

numsnbsp=nbsp[3,1,25,6,8,10,15]fornbspinbspinnbsprange(len(nums)-1):nbspnbspnbspnbspfornbspjnbspinnbsprange(len(nums)nbsp-nbspinbsp-1):nbspnbspnbspnbspnbspnbspnbspnbspifnbspnums[j]nbspgtnbspnums[j+1]:nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnums[j],nums[j+1]nbsp=nbspnbspnums[j+1],nums[j]nbspnbspnbspnbspnbspnbspnbspnbspprint(#34第#34+str(j)+#34次内循环#34+str(nums))nbspnbspnbspnbspprint(#34第#34+str(i)+#34次外循环#34+str(nums))print(#34的结果#34+str(nums))

我们先遍历nums,这不就是我们的range(len(nums)-1),至于为什么是range(len(nums)-1),其实就是我们的下标从0开始的,len(nums)返回是7,range是左开右闭,冒泡排序,我们只需要取到nums[5] = 10 就足够了,所以这里range(len(nums)-1),取到[3,1,25,6,8,10]。

然后,我们在遍历之后的nums,比如i = 0,我们将j取值范围到len(nums) - i -1,用nums[j] gt nums[j+1]判断两两的大小, 每次内循环将更大的移到最右边。

每一次内循环的目的就是将当中更大的移到最右边,而每一次外循环的目的就是当更大的移到最右边后,缩小范围,再寻找更大的数,再把它移到最右边。

我们执行上面的代码的结果如下

第0次内循环[1,nbsp3,nbsp25,nbsp6,nbsp8,nbsp10,nbsp15]第1次内循环[1,nbsp3,nbsp25,nbsp6,nbsp8,nbsp10,nbsp15]第2次内循环[1,nbsp3,nbsp6,nbsp25,nbsp8,nbsp10,nbsp15]第3次内循环[1,nbsp3,nbsp6,nbsp8,nbsp25,nbsp10,nbsp15]第4次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp25,nbsp15]第5次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第0次外循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第0次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第1次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第2次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第3次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第4次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第1次外循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第0次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第1次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第2次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第3次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第2次外循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第0次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第1次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第2次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第3次外循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第0次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第1次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第4次外循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第0次内循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]第5次外循环[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]的结果[1,nbsp3,nbsp6,nbsp8,nbsp10,nbsp15,nbsp25]

我们可以看到,第0次外循环,已经将25放在了最右边,第1次外循环确定把15放到最右边,这样从右往左,从大到小,这就是完整的冒泡排序。

冒泡排序的时间复杂度是假设被排序的数列中有N个数。遍历一趟的时间复杂度是,需要遍历多少次呢?N-1次!,冒泡排序的时间复杂度。

冒泡排序是稳定的算法它满足稳定算法的定义;所谓算法稳定性指的是对于一个数列中的两个相等的数a[i]=a[j],在排序前,a[i]在a[j]前面,经过排序后a[i]仍然在a[j]前,那么这个排序算法是稳定的。

下面是Java冒泡排序代码。

publicnbspclassnbspSortnbsp{nbspnbsppublicnbspstaticnbspvoidnbspsort()nbsp{nbspnbspnbspnbspScannernbspinputnbsp=nbspnewnbspScanner(System.in)nbspnbspnbspnbspintnbspsort[]nbsp=nbspnewnbspint[10]nbspnbspnbspnbspintnbsptempnbspnbspnbspnbspSystem.out.println(#34请输入10个排序的数据#34)nbspnbspnbspnbspfornbsp(intnbspinbsp=nbsp0nbspinbspltnbspsort.lengthnbspi++)nbsp{nbspnbspnbspnbspnbspnbspsort[i]nbsp=nbspinput.nextInt()nbspnbspnbspnbsp}nbspnbspnbspnbspfornbsp(intnbspinbsp=nbsp0nbspinbspltnbspsort.lengthnbsp-nbsp1nbspi++)nbsp{nbspnbspnbspnbspnbspnbspfornbsp(intnbspjnbsp=nbsp0nbspjnbspltnbspsort.lengthnbsp-nbspinbsp-nbsp1nbspj++)nbspnbspnbspnbspnbspnbspnbsp{nbspnbspnbspnbspnbspnbspnbspnbspifnbsp(sort[j]nbspltnbspsort[jnbsp+nbsp1])nbsp{nbspnbspnbspnbspnbspnbspnbspnbspnbspnbsptempnbsp=nbspsort[j]nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspsort[j]nbsp=nbspsort[jnbsp+nbsp1]nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspsort[jnbsp+nbsp1]nbsp=nbsptempnbspnbspnbspnbspnbspnbspnbspnbsp}nbspnbspnbspnbspnbspnbsp}nbspnbspnbspnbsp}nbspnbspnbspnbspSystem.out.println(#34排列后的顺序为#34)nbspnbspnbspnbspfor(intnbspi=0iltsort.lengthi++){nbspnbspnbspnbspnbspnbspSystem.out.print(sort[i]+#34nbspnbspnbsp#34)nbspnbspnbspnbsp}nbspnbsp}nbspnbsppublicnbspstaticnbspvoidnbspmain(String[]nbspargs)nbsp{nbspnbspnbspnbspsort()nbspnbsp}}

JavaScript冒泡排序代码。

functionnbspsort(arr)nbsp{nbspnbspnbspnbspfornbsp(varnbspinbsp=nbsp0nbspinbspltnbsparr.lengthnbsp-nbsp1nbspi++)nbsp{nbspnbsp//外部for循环nbspnbspnbspnbspnbspnbspnbspnbspfornbsp(varnbspjnbsp=nbsp0nbspjnbspltnbsparr.lengthnbsp-nbspinbsp-nbsp1nbspj++)nbsp{nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspifnbsp(arr[j]nbspgtnbsparr[jnbsp+nbsp1])nbsp{nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspvarnbsptempnbsp=nbsparr[j]nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsparr[j]nbsp=nbsparr[jnbsp+nbsp1]nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsparr[jnbsp+nbsp1]nbsp=nbsptempnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsp}nbspnbspnbspnbspnbspnbspnbspnbsp}nbspnbspnbspnbsp}nbspnbspnbspnbspreturnnbsparr}//举例如下varnbsparrnbsp=nbspsort([1,nbsp7,nbsp4,nbsp97,nbsp23,nbsp45])console.log(arr)

?

本文已收录 GitHub,传送门~[1] ,里面更有大厂面试完整考点,欢迎 Star。

?

Reference

[1]

传送门~: https://github.com/MaoliRUNsen/runsenlearnpy100

双向冒泡排序和快速排序 冒泡排序算法时间复杂度

Copyright@2015-2025 白癜风网版板所有