冒泡排序

排序----------冒泡排序

柔情痞子 提交于 2019-12-02 11:12:22
一、冒泡排序 平均时间复杂度: O(n²) 最差时: O(n²) 是否稳定: 稳定 空间开销:O(1) 适合n较小时 原始数组:3 , 9, -1, 8, 2 第一趟排序: (1) 3, 9, -1, 8,2 (2) 3, -1, 9,8, 2 (3) 3, -1, 8, 9, 2 (4)3, -1, 8, 2, 9 9确定 第二趟排序: (1)-1,3, 8, 2, 9 (2)-1, 3, 8, 2, 9 (3)-1,3,2, 8, 9 8 , 9确定 第三趟排序: (1)-1,3 ,2 ,8 , 9 (2)-1, 2, 3 ,8 ,9 3, 8, 9确定 第四趟排序: (1)-1, 2, 3, 8, 9 (2, 3, 8, 9确定) 实现: int [ ] array = { 3 , 9 , - 1 , 8 , 2 } ; int temp = 0 ; for ( int i = 0 ; i < array . length - 1 ; i ++ ) { System . out . println ( "开始第" + ( i + 1 ) + "趟排序" ) ; for ( int j = 0 ; j < array . length - 1 - i ; j ++ ) { if ( array [ j ] > array [ j + 1 ] ) { temp = array [

冒泡排序和选择排序的区别

大憨熊 提交于 2019-12-02 10:37:47
冒泡排序和选择排序的区别 冒泡排序是前后两个两两比较,大的数往后面放,像个泡泡一样,一直冒到最后面去;代码如下: public static void maopao(int[] arr){ for(int i=0;i<arr.length;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[j]>arr[j+1]) { int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } } 而选择排序是将一个数拿出来与后面所有数比较,找出最小值,放到最前面;代码如下: public static void xuanze(int[] arr) { for(int i=0;i<arr.length-1;i++) { int min=arr[i]; int index=i; for(int j=i+1;j<arr.length;j++) { if(min>arr[j]) { min=arr[j]; index=j; } } int temp=arr[i]; arr[i]=arr[index]; arr[index]=temp; } } 来源: https://blog.csdn.net/weixin_45799293/article/details/102752836

数组的冒泡排序和选择排序

谁都会走 提交于 2019-12-02 09:07:10
数组排序: 冒泡排序:将数组中的元素,两两比较,大的放后面 for(var i = 0 ; i < arr.length-1 ; i++){ for ( var j = 0 ; j< arr.length-1-i ; j++){ if( arr[ j ] > arr [ j +1]){ var a = arr[ j ]; arr[ j ] = arr [ j +1]; arr[ j+1] = a ; } } } console.log(arr); !] 选择排序:从左向右,依次取一个数值,与后面所有数值做比较,最小的放前面 var arr = [6,4,9,0,1,3,2]; // 0-1,0-2,0-3,0-4 0 ~ length-1 (第一位和第二位、第三位、第四位、第五位依次比较) // 1-2,1-3,1-4 1 ~ length-1 (第二位和第三位、第四位、第五位依次比较) // 2-3,2-4 2 ~ length-1 (第三位和第四位、第五位依次比较) //3-4 3 ~ length-1 (第四位和第五位比较) for(var i = 0;i<arr.length-1;i++){ var min = arr[i]; var minIndex = i; for(var j=i+1;j<arr.length;j++){ if(min > arr[j]){ min

关于今天面试的总结和面试题的一个分享

天大地大妈咪最大 提交于 2019-12-02 07:03:25
见天面试高新区面试了一家公司,简单的说说,今天的感受公司氛围挺好的,公司环境也挺好的因为自己的原因可能对于这场面试只能错过 今天面试的时候,开始给你一份面试题和相关调查,面试题自我感觉写的其实挺不错,所有的问题不说全对,但是心里还是有一点谱, 主要的问题是出现在数据库的这一方面,数据库一直浮于表面只会简单的sql 如视图 存储过程 游标 等等,不够深入 下面稍微总结一下,面试题的相关 1 问题 var 和 dynamic的区别  当时面试的回答: var是属于一种语法糖的存在她是由编译器经过程序的推断而产生的 她第一次出现在 dynamic 是一种绕过编译器而书写的代码使用dynamic很容易造成程序的不准确因为dynamic绕过编译器这样无论编写何种内容编译器都不会报错从而造成一定的不安全性 百度答案: var 在编译阶段已经确定类型,在初始化时候,必须提供初始化的值,而dynamic则可以不提供,它是在运行时才确定类型。 2 下面是自己写的方法 (晚上回来查的时候发现更简单的方法) //1 1 2 3 5 8 13 21 34 使用迭代的方法获取的17位 1 //1 1 2 3 5 8 13 21 34 使用迭代的方法获取的17位 2 //使用迭代的方法 3 #region 使用迭代的方法自己面试时写的 4 static List<int> ids = new List<int

[算法]冒泡排序

早过忘川 提交于 2019-12-02 07:00:45
时间复杂度O(n^2) 基本思想:类似于冒气泡,将最大的冒到最上面。有两个指针,一个指着当前需要排序的序列,一个指着最后,然后慢慢往上冒。 #include <QCoreApplication> #include <iostream> #include <algorithm> #include <vector> using namespace std; void swap(int &a,int &b) { int temp=a; a=b; b=temp; } void bubbleSort(int a[],int size) { for(int i=0;i<size;i++) { for(int j=size-1;j>=i+1;j--) { if(a[j]<a[j-1]) swap(a[j],a[j-1]); } } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); int A[5]={1,3,2,5,4}; bubbleSort(A,5); for(auto s:A) { cout<<s<<" "; } cout<<endl; return a.exec(); } 来源: https://www.cnblogs.com/tailiang/p/11735676.html

C++面试中的排序算法总结

梦想与她 提交于 2019-12-02 06:48:56
查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。 面试官对于这些排序可能会要求比较各自的优劣、各种算法的思想及其使用场景。还有要会分析算法的时间和空间复杂度。通常查找和排序算法的考察是面试的开始,如果这些问题回答不好,估计面试官都没有继续面试下去的兴趣都没了。所以想开个好头就要把常见的排序算法思想及其特点要熟练掌握,有必要时要熟练写出代码。 接下来我们就分析一下常见的排序算法及其使用场景。限于篇幅,某些算法的详细演示和图示请自行寻找详细的参考。 冒泡排序 冒泡排序是最简单的排序之一了,其大体思想就是通过与相邻元素的比较和交换来把小的数交换到最前面。这个过程类似于水泡向上升一样,因此而得名。举个栗子,对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排到最前面了

冒泡排序--python

故事扮演 提交于 2019-12-02 04:50:54
1 import random 2 3 4 # 原始冒泡排序 5 def bubble_sort(nums): 6 counter = 0 7 for i in range(len(nums) - 1): # 这个循环负责设置冒泡排序的趟数 8 for j in range(len(nums) - i - 1): # 这个是每趟比较的次数,每次从0开始,底部是已有序 9 if nums[j] > nums[j+1]: 10 nums[j], nums[j+1] = nums[j+1], nums[j] 11 counter += 1 12 print('比较次数:', counter) 13 return nums 14 15 16 # 优化冒泡排序 17 def bubble_sort2(nums): 18 counter = 0 19 for i in range(len(nums) - 1): 20 ex_flag = False # 设置交换标志,如果没有进行交换,说明已排序完成,无需再进行 21 for j in range(len(nums) - 1): 22 if nums[j] > nums[j+1]: 23 nums[j], nums[j+1] = nums[j+1], nums[j] 24 counter += 1 25 ex_flag = True 26 if

排序(冒泡、桶排序、快速)(java)

守給你的承諾、 提交于 2019-12-02 02:29:07
每一个项目中基本都会用到排序,如成绩排名等等,可见排序的重要性,每一种排序方法都有自己的特点,在选择用哪一种排序的时候,要根据数据的多少以及效率、资源占用等问题考虑,排序有多种,比如冒泡排序、二分排序、快速排序、桶排序、堆排序等等,在这里主要给大家接受一下冒泡排序与桶排序以及快速排序。 冒泡排序 冒泡排序是比较典型的一个排序,大家在第一次接触排序时一般都是冒泡排序,冒泡排序的思想就是把大数或小数沉下去,从而完成排序。先给大家看一下源码 package sort; public class maopao { public static void main(String[] args) { int []a=new int[10]; //给数组赋值,大家也可以通过Scanner从控制台输入要排序的数字 int m; for(int i=0;i<10;i++) { a[i]=i; } for(int k=0;k<a.length;k++) { //需要给多少个数排序 for(int p=0;p<a.length-1;p++) { //每次需要比较多少次 if(a[k]>=a[p]) { //比较 m=a[k]; a[k]=a[p]; //两个数互相交换 a[p]=m; } } } for (int i:a) { System.out.println(i); //最后遍历数组,完成排序 }

冒泡排序

て烟熏妆下的殇ゞ 提交于 2019-12-01 19:55:14
今天抽出来点时间来总结总结冒泡排序,这种算法是最常见也比较简单易懂的排序算法。排序口诀:n个数字来排序,两两比较小靠前,外层循环n-1,内层循环n-1-i 来源: https://www.cnblogs.com/HTLucky/p/11715532.html

算法一:冒泡排序

不羁的心 提交于 2019-12-01 16:24:02
冒泡的原理 先来看一张图片 所谓冒泡排序就是: 假设有一列数组,判断其中每个相邻元素的大小,一但发现第一个数比第二的数要大[默认从小到大排序],就交换两个元素的位置,一直把,数组中最大的元素放置在数组的最后面 // 假设的数组 var list = [5,2,1,7,5,3,9,2,7]; // 当元素一直比较到最后,发现自己已经是最后一个数了,后面已经没有元素和自己进行比较了,所以我 只需要比较 length-1 个即可 for(var i = 0; i<list.length-1; i++){ // 判断第一个元素是否比第二的元素大,如果大,则交换两个元素的位置 if(list[i] > list[i+1]){ // 声明一个临时变量,储存数组的第一个值 var tmp = list[i]; list[i] = list[i+1]; list[i+1] = tmp; } } // 这段代码运行后,数组是这个样子的 // [2,1,5,5,3,7,2,7,9] 通过上面我们发现经过一轮循环后,数组中最大的元素,已经排序到最后面了 现在我们只需要,让上面的代码执行 多次既可以 所以我们这样做~~ for(var j = 0; j<list.lenth-1; j++){ // 每次比较完成后,数组的最后一个就不需要比较了 for(var i = 0; i<list.length-j