冒泡排序

Java 实现常见内排序

北城以北 提交于 2020-03-01 19:58:58
一、内排序 1、排序基本概念 (1)什么是排序?   排序指将一个数据元素集合或者序列 按照某种规则 重新排列成一个 有序的集合或者序列。分为内排序、外排序。排序算法的好坏直接影响程序的执行速度以及存储空间的占有量。 (2)什么是内排序?外排序?   内排序:指待排序的序列完全存放在内存中所进行的排序过程(不适合大量数据排序)。   外排序:指大数据的排序,待排序的数据无法一次性读取到内存中,内存与外存需进行多次数据交换,以达到排序的目的。 (3)什么是稳定排序?   稳定排序指的是 相等的数据经过某种排序算法排序后,仍能保证它们的相对顺序与未排序之前相同。   比如一个序列 a1 a2 a3 a4 a5, 且 a1 < a2 = a3 < a4 < a5。   若经过某种排序算法后,结果仍为 a1 < a2 = a3 < a4 < a5,那么该排序算法是稳定的。   若经过某种排序算法后,结果为 a1 < a3 = a2 < a4 < a5,那么该排序算法是不稳定的。 2、内排序分类 (1)按种类划分:   插入排序:直接插入排序、希尔排序。   选择排序:选择排序、堆排序。   交换排序:冒泡排序、快速排序。   归并排序:归并排序。 (2)按稳定排序划分:   稳定排序:冒泡排序、归并排序、直接插入排序。   非稳定排序:快速排序、希尔排序、堆排序、选择排序。 (3)比较:

冒泡排序

别来无恙 提交于 2020-03-01 17:29:11
原理:依次对数组中相邻数字进行比较(两两比较),大的放后面。js代码如下: 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]; //将当前元素(大元素)放在后一个元素的位置 arr[j] = sum; //将小元素从空瓶子中拿出来,放在当前元素的位置 } } } console.log(arr); //完成循环之后,初始数组的顺序已经发生改变 实现冒泡排序的关键是每次和后面的数据比较后,声明一个空瓶子用来替换,要把最大的放在比较的后面,循环比较后就会实现冒泡排序。 来源: CSDN 作者: jungleyang_y 链接: https://blog.csdn.net/jungleyang_y/article/details/104592436

手写冒泡排序

半城伤御伤魂 提交于 2020-03-01 14:20:07
// 冒泡排序原理: // 把第一项a和后一项b进行比较,如果a比b大,那么把第一项后移,第二项前移。 // 也就是把第一项变成b,把第二项变成a,依次循环,把每一项都执行一遍。 let arr = [1, 2, 4, 8, 5, 10, 9, 7, 6]; // 减1是为了最后一项不用再和后面的进行比较了,减去j也是不用对当前j进行循环 let isOk = true; for (let j = 0; j < arr.length -1; j ++) { for (let i = 0; i < arr.length - 1 - j; i ++) { let a = arr[i]; let b = arr[i + 1]; if (a > b) { arr[i] = b; arr[i + 1] = a; isOk = false; } if (isOk) { // 如果已经排好,就不继续循环排序 break; } } } 来源: https://www.cnblogs.com/yxfboke/p/12389425.html

排序算法-09-冒泡排序(Bubble Sort)

不问归期 提交于 2020-03-01 01:24:25
##Basics Sorting - 基础排序算法 算法复习——排序 ###算法分析 时间复杂度-执行时间(比较和交换次数) 空间复杂度-所消耗的额外内存空间 使用小堆栈或表 使用链表或指针、数组索引来代表数据 排序数据的副本 对具有重键的数据(同一组数按不同键多次排序)进行排序时,需要考虑排序方法的稳定性,在非稳定性排序算法中需要稳定性时可考虑加入小索引。 稳定性 :如果排序后文件中拥有相同键的项的相对位置不变,这种排序方式是稳定的。 常见的排序算法根据是否需要比较可以分为如下几类: Comparison Sorting 1.Bubble Sort 2.Selection Sort 3.Insertion Sort 4.Shell Sort 5.Merge Sort 6.Quck Sort 7.Heap Sort Bucket Sort Counting Sort Radix Sort 从稳定性角度考虑可分为如下两类: -稳定 -非稳定 有关排序法的文章 常用排序算法总结(性能+代码) - SegmentFault Sorting algorithm - Wikipedia, the free encyclopedia - 各类排序算法的「平均、最好、最坏时间复杂度」总结。 经典排序算法总结与实现 | Jark's Blog - 基于 Python 的较为清晰的总结。 【面经

冒泡排序Java实现

别说谁变了你拦得住时间么 提交于 2020-02-29 21:50:46
import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int[] arr = {33,14,44,23,63,27}; bubbleSort(arr); System.out.println(Arrays.toString(arr)); } public static void bubbleSort(int[] arr){ for (int i = 0; i < arr.length-1; i++) { // 因为完成了i个,所以减i for (int j = 0; j < arr.length-1-i; j++) { if(arr[j]>arr[j+1]){ int temp; temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } } 结果:[14, 23, 27, 33, 44, 63] 来源: CSDN 作者: 聋 链接: https://blog.csdn.net/weixin_42313246/article/details/104576204

JavaScript--冒泡排序

巧了我就是萌 提交于 2020-02-29 19:36:14
JavaScript–冒泡排序 1.冒泡排序的基本算法 冒泡排序就是将数组中的每一个数字,利用循环的方式,从第1位数字开始,两两进行比较,假设第1位数字大于第2位数字,将两者进行交换,直至最后一位数字,通过一轮的比较,最后一位数字就是最大的一位数字,然后再进行第二轮比较,最终得到数字从小到大排序好的数组. 2.JavaScript语法 // 创建一个数组 var arr = [6,7,2,3,0,5,8,1,4,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]){ // 判断两位相邻数字的大小,如果当前数字大于下一位的数字,将二者互换 var t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t; } } } 3.我们将每一次排序的结果在后台输出,完整的代码如下: var arr = [6,7,2,3,0,5,8,1,4,9]; console.log('初始数组:' + arr); for(var i = 0; i < arr.length - 1; i++){ for(var j = 0; j < arr.length - i -

python手写十大经典排序算法 一.冒泡排序法

半腔热情 提交于 2020-02-29 19:30:06
冒泡排序 (1)实现步骤 1.比较相邻两个元素,如果第一个比第二个大就交换对应位置 2.对每一对相邻元素作同样的操作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 3.针对所有的元素重复以上的步骤,除了最后一个。 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 (2)动画演示 (3)手撸代码 老铁看图,我在给您亲自捋一遍,如何用python实现冒泡排序.首先循环嵌套是跑不了,外层循环是用来控制运行次数,内层循环是实现,相邻两个位置上数的大小比较. lst = [ 5 , 9 , 4 , 8 , 7 ] # 设置一个待排序的数列 for i in range ( len ( lst ) ) : # 第一层循环:控制次数 for j in range ( len ( lst ) - 1 - i ) : # 第二次循环:实现相邻位置比大小,交换的功能 if lst [ j ] > lst [ j + 1 ] : lst [ j ] , lst [ j + 1 ] = lst [ j + 1 ] , lst [ j ] ```python 在这里插入代码片 (4)优化 如果说对于一个lst这种的,正好符合顺序,而常规操作,依旧是对他进行一遍无用操作 因此可得:优化点就是,尽量减少无用操作.只要知道本趟一次都没有交换位置的,就可以知道了

Python之冒泡排序和选择排序的比较

大兔子大兔子 提交于 2020-02-29 02:14:49
个人有时候会把冒泡排序和选择排序搞混了,因为感觉它们之间的差别也没太大,如下是冒泡排序Python的代码: class BubbleSort: def __init__(self): self.initArr() def initArr(self): self.arrInfo = [60, 61, 27, 91, 92, 44, 13, 20, 24, 14] def bubbleSortFromStartToEnd(self): length = len(self.arrInfo) for i in range(length): for j in range(length-i-1): if self.arrInfo[j] > self.arrInfo[j+1]: tmp = self.arrInfo[j] self.arrInfo[j] = self.arrInfo[j+1] self.arrInfo[j+1] = tmp def bubbleSortFromEndToStart(self): length = len(self.arrInfo) for i in range(0,length): for j in range(length-1,i,-1): if self.arrInfo[j] < self.arrInfo[j-1]: tmp = self.arrInfo[j]

十大经典算法排序总结对比

ぐ巨炮叔叔 提交于 2020-02-28 13:31:56
十大经典算法排序总结对比 一张图概括: 主流排序算法概览 名词解释: n : 数据规模 k :“桶”的个数 In-place : 占用常数内存,不占用额外内存 Out-place : 占用额外内存 稳定性 :排序后2个相等键值的顺序和排序之前它们的顺序相同 冒泡排序(Bubble Sort) 冒泡排序须知: 作为最简单的排序算法之一,冒泡排序给我的感觉就像Abandon在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。。。冒泡排序还有一种优化算法,就是立一个flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。。。 什么时候最快(Best Cases): 当输入的数据已经是正序时(都已经是正序了,我还要你冒泡排序有何用啊。。。。) 什么时候最慢(Worst Cases): 当输入的数据是反序时(写一个for循环反序输出数据不就行了,干嘛要用你冒泡排序呢,我是闲的吗。。。) 冒泡排序动图演示: 冒泡排序JavaScript代码实现: function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1])

Java中的排序算法:冒泡排序

泪湿孤枕 提交于 2020-02-28 02:39:00
学习了一种新的排序算法:冒泡排序,冒泡排序是一种交换排序,指比较相邻的两个元素,如果前者比后者大,就交换位置,继续进行比较。 通过例子来实现: import java.util.Arrays; public class Bubblesort { public static void main(String[] args) { int[] arr=new int[] {1,2,5,3,6,3,8,5,9,0};//定义一个数组 System.out.println(Arrays.toString(arr)); bubbleSort(arr); System.out.println(Arrays.toString(arr)); } public static void bubbleSort(int[] arr) { //遍历数组 for(int i=0;i<arr.length-1;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; } } } } } 来源: oschina 链接: https://my.oschina.net/u/4455988