冒泡排序

常用排序算法

一世执手 提交于 2019-11-27 23:53:22
经常撕逼的一个问题,一个程序员联冒泡排序都写不出来....说实话,不经常用真有可能写不出来,这两个for循环很容易弄错,只能说明的就是实现原理。 注:看结果更好理解程序。。。 冒泡排序 package sort; /** * 冒泡排序 * @author mercy * 前一个和后一个比较找出最大值,再依次找找除了最大值的下一个最大值。 */ public class BubbleSort { public static void sort(int arr[]) { for (int i = 1; i < arr.length; i++){ for (int j = 0; j < arr.length-i; j++) { //比的次数随着i的值越大次数越少 if (arr[j] > arr[j + 1]) //值大的往后放,否则值小的往后放 int temp; temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } for (int m = 0; m < arr.length; m++) { System.out.print(arr[m] + " "); } System.out.println(" "); } System.out.println("数组长度为:" + arr.length); } public

排序

这一生的挚爱 提交于 2019-11-27 20:38:47
冒泡排序 #冒泡排序:两个元素一一比对,大的往后走 def sort(alist): length = len(alist) for j in range(length-1): #找出列表中的最大值,一一比对,需要比对列表长度-1次 for i in range(length-1-j): if alist[i] > alist[i+1]: alist[i],alist[i+1] = alist[i+1],alist[i] a = [3,8,5,7,6] sort(a) print(a) 冒泡排序示例代码 来源: https://www.cnblogs.com/q240756200/p/11375369.html

事件监听,冒泡排序,切换图片,轮播

杀马特。学长 韩版系。学妹 提交于 2019-11-27 20:35:11
事件监听方法: var a11=document.getElementById('id1'); //先获取标签 var a22=document.getElementById('id1'); //先获取标签 a11.addEventListener('click',show); //给元素addEventListener点击事件。 a22.onClick=function{ a11.removeEventListener('click',show); 之后给另一个元素添加点击事件-remove掉上个标签的事件 function show(){} //设置的点击事件show 冒泡排序: 对数组array=[9,4,3,1,2,6,7,8,5,0]进行排序 function(){ for(var i=0;i<array.length;i++){ //循环length遍   for(var j=0;j<array.lenth-j;i++){   if(array[j]>array[j+1]({ //比较相邻的两个数,如果前一个数大于后一个数,则两数互换。   temp=array[j];  //互换   array[j]=array[j+1];   array[j+1]=temp; } } } } 点击切换上一张图、下一张图: 将图片的地址放入一个数组中,通过索引调用。 var

常用排序算法学习总结

风流意气都作罢 提交于 2019-11-27 18:56:29
本文转自: http://www.codeceo.com/article/10-sort-algorithm-interview.html#0-tsina-1-10490-397232819ff9a47a7b7e80a40613cfe1 仅用于个人学习记录,侵删! 冒泡排序 通过与相邻元素的比较和交换来把小的数交换到最前面。 对5,3,8,6,4这个无序序列进行冒泡排序。 首先从后向前冒泡,4和6比较,把4交换到前面,序列变成5,3,8,4,6。 同理4和8交换,变成5,3,4,8,6 3和4无需交换。 5和3交换,变成3,5,4,8,6,3。 这样一次冒泡就完了,把最小的数3排到最前面了。 对剩下的序列依次冒泡就会得到一个有序序列。冒泡排序的时间复杂度为O(n^2)。 /** * 冒泡排序算法实现 * @param arr */ public static void bubbleSort(int[] arr){ System.out.println("排序前:"); for (int i : arr) { System.out.print(i+" "); } System.out.println(); if(arr == null || arr.length == 0){ return ; } for(int i = 0; i < arr.length; i++){ for

冒泡排序算法之优化

只谈情不闲聊 提交于 2019-11-27 17:02:44
针对问题: 数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次,后面的比较没有意义的。 方案: 设置标志位flag,如果发生了交换flag设置为true;如果没有交换就设置为false。 这样当一轮比较结束后如果flag仍为false,即:这一轮没有发生交换,说明数据的顺序已经排好,没有必要继续进行下去。 代码: public int[] bubble(int[] array){ boolean flag;//是否交换的标志 for(int i = 0;i < array.length-1;i++){ flag = false;// 每次遍历标志位都要先置为false,才能判断后面的元素是否发生了交换 for(int j = 0;j < array.length-i-1;j++) { if (array[j] > array[j + 1]) { array[j] = array[j] ^ array[j + 1]; array[j + 1] = array[j] ^ array[j + 1]; array[j] = array[j] ^ array[j + 1]; flag = true; //只要有发生了交换,flag就置为true } } if(!flag) break; } return array; }    来源: https:/

js数组冒泡排序

こ雲淡風輕ζ 提交于 2019-11-27 15:10:40
js数组的冒泡排序是最经典的一种排序方式(我以为)。 冒泡排序是吧一组数组的元素两两比较,交换位置,通过多轮比较,实现从大到小或者从小到大的排序。 var arr = [1,0,5,6,3,9,22,49,20,11,78,9]; // 创建一个新数组 for(var i = 0; i <= arr.length-1; i++){ // 外层循环控制比较几轮 for(var j = 0; j <= arr.length-i-1; j++){ // 内层循环控制每轮比较几个元素 if(arr[j] > arr[j+1]){ // 判断每一次比较的时候,两个数字的大小 // arr[j]是第j个元素 // arr[j+1]是第j+1 个元素 //如果j > j + 1, 把j 和j+i交换,也就是把相对大的值往后排序 也就是从小到大排序 //如果j < j + 1, 把相对小的值往后排 也就是从大到小排序 var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; // 利用第三方变量交换j 和j + 1 的值 } } } console.log(arr); 来源: https://www.cnblogs.com/sandraryan/p/11367870.html

排序算法--冒泡排序

旧巷老猫 提交于 2019-11-27 14:14:19
冒泡排序算是我们接触到的第一个排序,因为它简单,当然了也是有公司面试会问的。 原理 :依照次序不断地两个两个向后比较,比较相邻元素,我们拿整数数组为例,并且我们按照升序排列。每一趟将一个最大的元素放到最末尾,进行n-1次比较即可(此处需要说明一下,有时候有改进,就是搞一个标记,如果遍历一趟,没有进行任何交换,那么这个数组也就已经排好序了,不需要再继续排序,则停止。这个时候可能不是遍历n-1趟)。 步骤 :1、j代表这一趟遍历需要最终放好的元素的位置,i代表遍历没有排好序的元素,两两相邻比较 2、j <— length-1..1, i <— 0..j-1 3、遍历,如果第i个元素大于第i+1个,则进行交换,否则继续 4、完成遍历,打印结果 分析: 首先看时间复杂度,我们不考虑加标记这种情况,时间复杂度就是O(n^2),再看交换的时候我们是第i个大于第i+1才交换,所以它是稳定的,并且不需要其他存储,所以它是原地的。 代码展示 :搞个JAVA写的代码看一下,当然,语言只是表述的方式,我们主要看思想和步骤。为了方便看每一趟排序的结果,我这里排完一趟我就打印一下整个数组。全部排完再打印一下。 public class BubbleSort { public static void main(String[] args){ int[] array = {7, 11, 5, 8, 7, 2,

冒泡排序

我是研究僧i 提交于 2019-11-27 14:14:13
冒泡排序    1 """ 2 冒泡排序 3 """ 4 def bubble_sort(int_list): 5 length = len(int_list) 6 if length <= 1: return int_list 7 for i in range(length - 1): 8 for j in range(length - i - 1): 9 if int_list[j + 1] < int_list[j]: 10 int_list[j + 1], int_list[j] = int_list[j], int_list[j + 1] 11 return int_list 12 13 14 if __name__ == '__main__': 15 int_str = input("请输入逗号分割的整数>>>").strip() 16 int_list = [int(i) for i in int_str.split(",")] 17 print(bubble_sort(int_list)) 来源: https://www.cnblogs.com/open-yang/p/11367076.html

经典排序算法1--冒泡排序

限于喜欢 提交于 2019-11-27 14:11:24
/* 经典排序算法--冒泡排序 1.从小到大排序。 #include<stdio.h> int main() { int n,a[100],i,j,t; printf("请输入要排序的元素个数:"); while(scanf("%d",&n)) { printf("请输入要排序的元素: "); for(i=0;i<n;i++) { scanf("%d",&a[i]); } //排序次数,最多需要n-1次。 for(i=1;i<n;i++) { //因为for中要用到a[j+1],所以j最大只能取n-2,否则会用到a[n],数组会越界。 for(j=0;j<n-i;j++) { if(a[j]>a[j+1]) { t=a[j+1]; a[j+1]=a[j]; a[j]=t; } } printf("这是第 %d 轮排序",i); for(int k=0;k<n;k++) { printf("%d ",a[k]); } printf("\n"); } printf("经过排序后的序列为:"); for(i=0;i<n;i++) { printf("%d ",a[i]); } } return 0; } 2.从大到小进行排序。 #include<stdio.h> int main() { int n,a[100],i,j,t; printf("请输入要排序的元素个数:"); while

4-2冒泡排序

左心房为你撑大大i 提交于 2019-11-27 12:34:49
冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 冒泡排序的分析 交换过程图示(第一次): 那么我们需要进行n-1次冒泡过程,每次对应的比较次数如下图所示: def bubble_sort(alist): for j in range(len(alist)-1,0,-1): # j表示每次遍历需要比较的次数,是逐渐减小的 for i in range(j): if alist[i] > alist[i+1]: alist[i], alist[i+1] = alist[i+1], alist[i] li = [54,26,93,17,77,31,44,55,20] bubble_sort(li) print(li) 时间复杂度 最优时间复杂度