冒泡排序

排序算法之冒泡排序

回眸只為那壹抹淺笑 提交于 2020-03-04 11:38:12
排序算法之冒泡排序 分析思路 :冒泡排序,顾名思义就是像冒气泡一样,可以从前冒到后,也可以从后冒到前。这里以从后冒到前,从小到大排序举例:从最后一个值开始,不断将其与前一个值进行比较,如果后面的值比前面的值要小,那就进行交换,这样遍历一次之后,序列第一个位置就已经是最小的值了,如此循环,O(n2)之后就可以全部排好序。 编程思路 : 顺序存储:如果序列为数组,我们可以采用两重for循环。第一重for循环用于记录未排好序序列的起点,第二重for循环用于遍历、比较和交换。 链式存储:如果序列为链表,我们可以采用双指针。第一个指针用于记录未排好序子链的起点,第二个指针用于遍历、比较和交换。(链式存储只能从前冒到后) 具体代码 : 顺序存储 void Emit_Bubble_Sort(int array[],int n) { for (int i = 0; i < n; i++) { for (int j = n-1; j > 0; j--) { if (array[j] < array[j - 1]) { int temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; } } } } 链式存储 void Emit_Bubble_Sort(Node *Head) { Node *p=Head->next,*q=Head-

js的冒泡排序和选择排序

邮差的信 提交于 2020-03-03 19:48:41
冒泡排序 概念 依次对数组中相邻数字进行比较(两两比较),大的放后面 学前准备 思考1 : i < arr.length 是遍历几次 i < arr.length-1 是遍历几次 思考2 : 交换两个变量 思考3 :数组中的最大值放到最后 var arr = [5, 4, 3, 2, 1]; 冒泡排序算法 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。 在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 代码实现 var arr = [5,99,2,9,1,5,67,7,10,23]; //定义一个杂乱的数组 for(var i=0;i<arr.length-1;i++){ //大循环,用于遍历数组每个元素 for(var j=0;j<arr.length-i-1;j++){ //小循环,用于将数组中的某个元素与其它所有元素相比较 var sum; //声明一个局部变量,当作第三个空瓶子 if(arr[j]>arr[j+1]){ //判断当前元素和后一个元素的大小,如果当前元素比后一个元素大 sum = arr[j+1]; //将后一个元素(小元素)放在空瓶子里 arr[j+1] = arr[j]; /

javaScript中冒泡排序的实现

时光毁灭记忆、已成空白 提交于 2020-03-03 18:25:05
冒泡排序就是两两相比较,然后将大的值放在后面。 整体的思路就是:如何交换两个变量和要理清总共要比较多少次。 1.如何交换两个变量? var a = 10; var b=22; var tmp =a; a = b; b= tmp; 2.如何将数组中最大的值放到最后? 这种情况只要循环遍历数组,然后两两比较,大的放后面即可,此种情况只需要遍历一次 var arr = [9,8,7,6,5]; for(var i=0;i<arr.length;i++){ if(arr[i]>arr[i+1]){ // 前面的元素,大于后面的元素,调换位置 var tmp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tmp; } } 3.冒泡排序则是在上一个的基础上,重复进行遍历数组的操作,将大的数值往后排 //一般基础的写法 var arr = [9,8,7,6,5]; // 比较的次数是数组长度-1,因为最后一遍不需要比较 for(var j =0;j<arr.length-1;j++){ // 控制比较次数 // 进行具体的比较 for(var i=0;i<arr.length;i++){ if(arr[i]>arr[i+1]){ var tmp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tmp } } }

用c++实现冒泡排序

本秂侑毒 提交于 2020-03-03 16:27:42
标题冒泡排序是一个经典的算法,简单来说用嵌套循环就能实现 现在假设有一个数组[3,5,7,2,4],那么如果要想把它用冒泡从小到大排序, 首先取3和5比较,3小于5;用5和7比较,5小于7;用7和2比较,7大于2;用7和4比较,7大于4; 第0轮比下来数组变为[3,5,2,4,7],比较了 5-1 次; 第1轮还是依次比较数组变为[3,2,4,5,7],比较了 5-2 次; 第2轮数组变为[2,3,4,5,7],比较了 5-3 次,此时发现数组已经从小到大排序,但是由于数组有5个数,所以两两比较,需要比较5-1轮,在每一轮比较的内部循环中,需要比较5-1-排序轮数。 所以结论是:排序总轮数 = 元素个数 - 1; 每轮对比次数 = 元素个数 - 1 - 排序轮数; c++代码如下: # include <iostream> using namespace std ; int main ( ) { int a [ 5 ] = { 2 , 4 , 6 , 7 , 3 } ; int temp = 0 ; for ( int i = 0 ; i < size ( a ) - 1 ; i ++ ) { for ( int j = 0 ; j < size ( a ) - 1 - i ; j ++ ) { if ( a [ j ] > a [ j + 1 ] ) { temp = a [ j

冒泡排序

[亡魂溺海] 提交于 2020-03-03 00:45:23
冒泡排序: 英文Bubble Sort,是一种最基础的交换排序。之所以叫做冒泡排序,正是因为这种排序算法的每一个元素都可以像小气泡一样,根据自身大小,一点一点向着数组的一侧移动。 算法的原理如下: 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。 在这一点,最后的元素应该会是最大的数。 3.针对所有的元素重复以上的步骤,除了最后一个。 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数 字需要比较。 核心代码: 1. 两个 for 循环 2. 一个循环减一次 3. 里层循环减外层循环变量 4. 使用里层循环变量交换 var arr = [2, 5, 6, 8, 4, 3, 7, 9, 1] for (var j = 0; j < arr.length - 1; j++) { for (var i = 0; i < arr.length - 1 - j; i++) { if (arr[i] > arr[i + 1]) { var tmp = arr[i] arr[i] = arr[i + 1] arr[i + 1] = tmp } } } console.log(arr) 来源: CSDN 作者: weixin_46447994 链接: https://blog.csdn.net/weixin

冒泡排序

不羁岁月 提交于 2020-03-02 12:24:42
冒泡排序是一种比较简单的排序算法。 在最近的demo学习中,初衷是为了将一组数据从大到小排序,或者从小到大排序,此处使用js来实现数据的排序。此处声明一个生成0~100的随机数数组。 var arr = []; for(var i=0;i<10;i++){ var num = Math.round(Math.random()*100); arr[arr.length] = num; } 使用双重for循环遍历数组,比较数组中相邻元素,如果索引小的元素的值 大于索引大的元素的值,则交换这两个相邻元素的值,用代码实现则是: for (var j = 0; j < arr.length-1; j++) { for (var i = 0; i < arr.length -j-1;i++) { if (arr[i] > arr[i + 1]) { var temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } } 最后可以得到一组从小到大排序的数据,如果要得到一组从大到小的数据,则只需要在循环判断中修改条件即可,也就是将值小的元素放在前面。在双重for循环的操作中需要注意一个细节,遍历比较到索引为arr.length-1个元素时即可,然后内循环中的i<arr.length-j-1则是为了优化程序避免不必要的比较次数

Java冒泡排序

允我心安 提交于 2020-03-02 05:06:00
一、冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 int[] x = {10, 5, 8, 82}; for (int i = 0; i < x.length; i++) {//外层循环控制排序趟数 for (int j = i; j < x.length; j++) {//内存循环控制每一趟排序多少次 if (x[i] > x[j]) {//如果数组的i项大于内层循环的j项 执行交换 int temp = x[i]; x[i] = x[j]; x[j] = temp; } } } for (int i = 0; i < x.length; i++) {//循环 System.out.print(x[i] + " ");//打印数组的结果 }

python冒泡排序

大城市里の小女人 提交于 2020-03-02 04:59:49
冒泡排序是最基本的排序算法,原理即元素两两比较。 一次将最大或者最小放到一端,那么实现过程是这样的 def bubble_sort(ls): ls_len = len(ls) for i in range(ls_len-1): for j in range(i+1, ls_len): if ls[i] > ls[j]: ls[i], ls[j] = ls[j], ls[i] 简单吧 来源: oschina 链接: https://my.oschina.net/u/186468/blog/675923

常用的排序算法(一)

萝らか妹 提交于 2020-03-02 04:38:22
Date: 2016-02-14 #####排序算法的学习 #### 冒泡排序 时间复杂度:当顺序为正序的时候,为最好状态时间复杂度为O(N),平均时间复杂的为O(N^2) 因为没有创建新的存储结构所以空间复杂度为O(1) 冒泡排序是一种稳定的排序算法 #include <stdio.h> void Bubble_sort(int A[],int n); void Bubble_sort(int A[],int n){ int i,j,temp; for(i= 0 ;i < n - 1 ;i++){ for(j = 0;j< n -1 - i;j++){ if(A[j] > A[j+1]){ temp = A[j+1]; A[j+1] = A[j]; A[j] = temp; } } } } int main(int argc, const char * argv[]) { int A[7]={3,1,2,4,6,8,1}; Bubble_sort(A, 7); for(int i =0; i < 7;i++){ printf("%d",A[i]); } } ####改进的冒泡排序 使用冒泡排序对N个数据进行排序,一共需要进行n-1次比较,本来是正常顺序的数据也需要进行n-1次排序,所以当判断所有的数据为有序的时候不在进行排序直接跳出循环, void Bubble_sort(int

JavaScript数组的冒泡排序

爱⌒轻易说出口 提交于 2020-03-02 00:20:42
冒泡排序: 意思是可以简单的理解为按照一定的规律把数组排列好, 是计算机语言基础算法的一种。 举例: var arr = [ 1 , 8 , 4 , 6 , 3 , 7 , 2 , 5 ] ; // 循环遍历数组,一位一位的去比较; for ( var i = 0 ; i < arr . length ; i ++ ) { // i 分别是 0 1 2 3 4 5 6 7 也就是数组里面每一项的索引值 // 进行一个条件判断,如果当前这个数字,比下一个数字大 if ( arr [ i ] > arr [ i + 1 ] ) { // 就让两个数字交换一下位置,准备一个tmp空变量来存储 var tmp = arr [ i ] ; arr [ i ] = arr [ i + 1 ] ; arr [ i + 1 ] = tmp ; } } console . log ( arr ) ; //[1, 4, 6, 3, 7, 2, 5, 8]; //循环一次,此时最大的一位数值交换到了最后 同样的道理,相同的代码再执行一次,倒数第二大的数字也会跑到倒数第二的位置上。再执行一次,倒数第三大的数字也会跑到倒数第三的位置上等等,执行一次后面的数字排好一次,执行二次后面的数字排好二次等等,因为我们的数组有8个数字,也就是要执行length-1次才要把我们的数组从小到大排列好。 var arr =