冒泡排序

python冒泡排序

北城余情 提交于 2019-12-11 06:18:32
python冒泡法排序 #python冒泡法排序,两两比较,开始排序。将单极最值放在最(左)右端,然后循环剩下的元素。 class BubbleSort ( ) : def sort_w ( self , nums ) : for i in range ( len ( nums ) - 1 ) : #i,j都是下角标序号;这里减一根本原因是作相邻交换时,数间个数总是比元素少一个 #这里用i来表示总循环次数 #j用来表示剩余循环次数 for j in range ( len ( nums ) - i - 1 ) : # print ( "j=%d" % j , end = " " ) if nums [ j ] < nums [ j + 1 ] : nums [ j ] , nums [ j + 1 ] = nums [ j + 1 ] , nums [ j ] return nums 另外,在python中,列表中的两个元素交换是不需要第三给变量了做容器的,直接用: nums [ j ] , nums [ j + 1 ] = nums [ j + 1 ] , nums [ j ] 这样就可以实现。 来源: CSDN 作者: 红烧牛肉方竹笋 链接: https://blog.csdn.net/great1024kb/article/details/103458234

冒泡排序

核能气质少年 提交于 2019-12-11 05:31:45
冒泡排序 1. 基本思想 冒泡排序是一种简单的交换排序方法,其基本思想为:从头扫描待排序列的数据元素序列依次比较相邻两个数据元素的值的大小,从起始值开始,如果前面的数据元素的值,大于相邻后面数据元素的值,则交换它们的位置,逐步将待排序列变成有序序列。 2.思路方法 对长度为length的数组进行冒泡排序时,总共需要进行length-1轮。第一轮需要比较length-1次,第2轮需要比较length-2次,最后一轮需要比较length-i次。 第一轮,排序见下图: 第二轮到最后一轮,方法同第一轮方法相同,从头开始依次比较相邻数据元素值的大小,前大于后两数据元素值交换,后大于前则不动,继续向后进行对比,直到本轮所有数据元素对比完,再进行下一轮。 3.代码实现 public class bubbleSort { public static void main ( String args [ ] ) { int [ ] arr = { 3 , 1 , 6 , 2 , 9 , 0 , 7 , 4 , 5 , 8 } ; for ( int i = 0 ; i < arr . length - 1 ; i ++ ) { for ( int j = 0 ; j < arr . length - i - 1 ; j ++ ) { if ( arr [ j ] > arr [ j + 1 ] ) {

【Python】冒泡排序和快速排序

坚强是说给别人听的谎言 提交于 2019-12-10 18:20:25
虽然说Python里面提供了现成的排序方式,而且效率也非常高,但是该会的还是得会。这里我也就不多说什么了,代码+注释,自己看吧! 在这里为了B站视频测试二者效率,所以增加了随机数和时间的计算。 from time import time from random import randint # 全局变量,便于修改 gl_length = 100 # 定义空列表,存放排序数据 num_list = [ ] # 产生随机数函数 def listRandom ( num_list ) : i = 0 while i < gl_length : # 随机范围0~999 num_list . append ( randint ( 0 , 1000 ) ) i += 1 # 遍历函数 def listForeach ( num_list ) : print ( "=" * 80 ) # 为了换行的美观,没有直接使用 for i in num_list for i in range ( gl_length ) : print ( num_list [ i ] , end = "\t" ) if ( ( i + 1 ) % 10 ) == 0 : print ( "\n" ) # 冒泡排序 def bubbleSort ( num_list ) : star_time = time ( ) for

冒泡排序优化

核能气质少年 提交于 2019-12-10 02:17:34
优化 优化:设置标志:isSort=true, 当有序时,第一趟就结束排序 冒泡排序: https://blog.csdn.net/qq_41055045/article/details/90720815 package com.arithmetic.sort; import java.lang.reflect.Method; import java.util.Arrays; /** * @Description * 功能:冒泡排序算法的改进 最好的情况时间复杂度为O(n),当原来就是正序时 * @Author xuexue * @Date 2019/5/31 17:03 */ public class DubbleSort2 { public static void main(String[] args) { //用于判断第一趟排序时,是否进行了交换,如果没有则是有序,不需要继续排序 boolean isSort = true; int[] items = new int[]{3, 5, 2, 1, 4, 10}; //冒泡排序实现 for (int i = 0; i < items.length -1; i++) {//共要比较的趟数 n-1躺 //每一躺的比较次数 n-1/n-2/n-3/../1 算法复杂度 (1+n-1)n/2=n^2/2=n^2 for (int j =

20191209-八大排序之冒泡排序

会有一股神秘感。 提交于 2019-12-09 21:04:42
1. 冒泡排序 算法核心思想 在数组arr[n]中,从第一个数开始,拿arr[i]和后面的数arr[i+1]进行比较,如果arr[i]比后面的大,就交换两个数的位置,这样遍历一遍数组后,把最大的数据排在了最后面,之后继续循环排剩下的n-1个数,直到完成所有的排序,由于每次都是把最大的排到最后面,就好像冒泡一样,故取名冒泡排序,具体执行逻辑如下: 取第一个数和后面第二个数到第n个数比较大小,如果位置错误交换位置,一轮结束后最大的值在第n个位置 取第一个数和后面第二个到第n-1个数比较大小,如果位置错误交换位置,一轮结束后第二大的值在第n-1个位置 取第一个数和后面第二个到第n-i个数比较大小,如果位置错误交换位置,一轮结束后第i大的值在第n-i个位置 重复上诉步骤直至排序结束 代码实现 def bubbleSort(arr): for i in range(len(arr)): for j in range(len(arr)-i-1): if arr[j]>arr[j+1]: arr[j],arr[j+1] = arr[j+1],arr[j] return arr 执行解析 使用两层for循环,外层控制比较的轮数,内层进行具体比较,len(arr)-i-1每一轮比较减少一个数即第一轮比较n个数,第二轮比较n-1个数,第n个数不参与比较,因为第一轮排序已经将最大的数放置在第n个位置

排序算法学习(一):冒泡排序

旧城冷巷雨未停 提交于 2019-12-08 20:29:28
所谓排序即按照一定的规律将一组数据进行排列。排序算法的形式化定义如下:设存在一组无序序列 ​ ,并且存在一个函数 ​,在经过一系列对该序列中的元素位置调整后,使得新得到的序列满足对于任意的 ​,均有 ​(升序排序)或者 ​(降序排序)。针对不同的数据源的不同特性,人们设计出了不同的排序算法,以求对算法的时间复杂度或者空间复杂度进行优化。常见的排序算法有:冒泡排序,插入排序,快速排序,桶排序算法等。下面对各种排序算法的原理进行简述,并分析其优缺点。(以下在对排序算法的描述时,都假设将数据按照升序排序进行排列)。 冒泡排序 冒泡算法的步骤如下:比较相邻两个元素的大小,根据比较结果将两个元素按照从小到大的顺序排列,逐步向后移动,一直移动到末端。冒泡算法中的一轮过程如图1所示,每i轮的排序过程即是将第i个最大的元素移动到当前的数组中最大的位置。在每一轮的排序过程中,右边的已排序序列长度不断增长,最终使得整个序列都成为已排序序列。冒泡排序的完整过程如下图所示: 图1 冒泡排序的完整过程 冒泡排序算法的最基本实现 根据图1所描述的过程,冒泡排序算法的最基本的Python代码实现如下: [sourcecode language='python' padlinenumbers='true'] def bubbleSort(data:List[int])->List[int]: length =

数据结构排序算法(一):排序方法分类和各种排序方法的实现

大兔子大兔子 提交于 2019-12-07 22:05:22
一、 实验目的 1. 掌握各种常用排序的算法思想; 2. 掌握各种常用排序的算法实现; 3. 掌握各种常用排序时间复杂度,比较各种排序的优缺点。 二.排序算法的归类: 总的排序算法分为以下几类: 1.插入类排序:如:直接插入排序,折半插入排序,希尔排序 2.交换类排序:如:冒泡排序,快速排序,其中冒泡排序应该是计算机专业的学生最为熟悉的一种排序算法了,而快速排序则是在冒泡排序的基础上一次消除多个逆序对改进而来 3.选择类排序:如:简单选择排序,堆排序。 4.其它类排序:如:归并排序,基数排序等。 三、 实验内容与要求 1. 编程实现各种排序算法,并对比各种算法的效率。 【设计要求】在给出的代码素材 sort.cpp文件 中补充 main函数中的swtich语句,以及以下排序函数,并比较各种排序方法在对素材文件中的1.data~5.data待排序序列进行排序时所需要的时间。 void shellsort(int data[],int n);//希尔排序 void bubllesort(int data[],int n);//冒泡排序 void quicksort(int data[],int n);//快速排序 void selectsort(int data[],int n);//简单选择排序 void heapsort(int data[],int n);//堆排序 void

排序算法:冒泡排序、插入排序、选择排序、希尔排序

混江龙づ霸主 提交于 2019-12-06 22:28:41
相关博客: 排序算法:冒泡排序、插入排序、选择排序、希尔排序 排序算法:归并排序、快速排序 排序算法:桶排序、计数排序、基数排序 排序算法:堆排序 十大排序算法小结 一、冒泡排序: 1、算法原理: 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系的要求。如果不满足就让它俩互换位置。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。 2、算法描述: (1)比较相邻的元素。如果第一个比第二个大,就交换它们两个; (2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; (3)针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成。 3、动图演示 : 4、Java代码实现: //1、冒泡排序 public void bubbleSort(int[] a){ int len = a.length; for(int i=0;i<len;++i){ //提前退出冒泡循环的标志 boolean flag = false; for(int j=0;j<len-i-1;++j){ if(a[j]>a[j+1]){ int temp = a[j]; a[j]=a[j+1]; a[j+1]=temp; flag=true;//true表示有数据交换 } } if(

冒泡排序

我们两清 提交于 2019-12-06 21:16:05
''' 冒泡算法的原理是经过每一轮的比较都能确定这一轮的最大数 所以到后面的比较次数都是依次少一 例如[3,4,9,1,5] 第一轮比较,比较4次 由于是有5个数,相邻的两个数两两比较,5个数需要比较4次,N个数,需要比较N-1次 3,4比较不用变 4,9比较不用变 9,1比较要交换位置 变成1,9 9,5比较需要交换位置,变成5,9 这样就完成了第一轮的比较,第一轮确定了列表的最大一位数为9,之后的比较就可以把9祛除了 再去比较其他的数就好了,应为既是是比较了,位置也是不会改变,浪费资源而已 经过第一轮的比较列表变成了[3,4,1,5,9],第二轮只需要比较三次 第二轮由于最后一个确定了,只需要比较三次就好了 3,4比较不用变 4,1比较需要交换,变成1,4 4,5比较,不用变, 由此我们确定了第二大的数是5 列表变成了[3,1,4,5,9] 第三轮比较,只需要比较两次 3,1比较需要交换,变成1,3 3,4比较不用改变, 列表变成了[1,3,4,5,9] 第四轮比较,只需要完成一次就行了 1,3比较不需要变化位置, 因此最终的列表为[1,3,4,5,9] ''' from random import randint l1 = [ randint(1,100) for _ in range(10)] print(l1) def dubbel_sort(arr): k = 0

排序算法之冒泡排序

浪尽此生 提交于 2019-12-06 14:32:53
冒泡排序(Bubble Sort) 冒泡排序核心思想是重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成。 代码实现 public class BubbleSort { public static void main(String[] args) { int[] num = new int[]{5,4,6,2,7,3,1}; sort(num); } public static void sort(int[] num){ for (int i = 0; i < num.length ; i++) { // 外循环每完成一次,都会出现一个最大值,所以内循环的比较次数要减去i,即j < num.lengh-i-1 for (int j = 0; j < num.length - i - 1 ; j++) { if (num[j] > num[j+1]) { int temp = num[j]; num[j] = num[j+1]; num[j+1] = temp; } } for (int k : num) {