冒泡排序

PHP面试:写出常见的排序算法,并用PHP实现冒泡排序

£可爱£侵袭症+ 提交于 2020-03-24 13:25:30
面试中,涉及算法相关的考点并不多,因为在实际工作中PHP涉及的算法都很简单,但也会出现在一些笔试中,用于考察面试者的基本功,其中考察最多的就是排序算法,而对 冒泡排序的理解和实现 更是重中之重。 常见排序算法 冒泡排序 直接插入排序 希尔排序 选择排序 堆排序 归并排序 常考题:以上哪个算法的效率更快?(如果有 归并排序 优先选择,没有的话,选择 快速排序) 冒泡排序的原理 两两相邻的数进行比较,如果反序就交换,否则不交换。 时间复杂度:O(n^2) 空间间复杂度:O(1) 冒泡排序的实现 for ($i=0, $c=count($arr); $i < $c ; $i++) { for ($j=0; $j < $c-1; $j++) { if($arr[$j] > $arr[$j+1]){ $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } } 来源: https://www.cnblogs.com/jiaoran/p/12558252.html

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

荒凉一梦 提交于 2020-03-23 13:26:12
一、冒泡排序 相邻的两个单元比较,如果前者数据大,则交换位置(大的放后面)。 需要嵌套两层循环,外层循环根据有多少个数据单元需要比较大小来确定循环次数;           内层循环根据每确定一个数据单元需要多少次比较来确定循环次数。 下面是为优化的程序 <script> var arr = [9, 5, 6, 8, 2, 7, 3, 4, 1]; for(var i = 0 ; i < arr.length ; i++){ //外层循环,有length个单元(0~length-1)需要比较 for(var j = 0 ; j < arr.length ; j++){ //内层循环,需要从起始单元比较到最后一个单元 if(arr[j] > arr[j+1]){ //判断是否前者大,前者大进行交换 var middle = 0; middle = arr[j]; arr[j] = arr[j+1]; arr[j+1] = middle; } } } console.log(arr); </script> 优化代码 <script> var arr = [9, 5, 6, 8, 2, 7, 3, 4, 1]; for(var i = 0 ; i < arr.length - 1 ; i++){    //有n个单元排序,只需循环(n-1)次,前(n-1)个确定了大小,最后一个便确定了。

冒泡排序和选择排序

断了今生、忘了曾经 提交于 2020-03-23 01:25:28
冒泡排序和选择排序 作用和原理 将数组中的数值,按照执行的顺序,从小到大排序或者从大到小排序,本文中均为从小到大排序。 冒泡排序 原理: 相邻的两个单位,比较存储的数据,如果第一个单元的数据较大,就将两个相邻单元,交换存储数据 核心: 交换存储的数据 两个相邻的单元,比较数据大小,第一个单元数值较大,就交换两个单元存储的数据 var num=[5,6,7,1,8,9,3,4,2]; //这是用的最基础的for循环嵌套的语法写的,主要是排序的思路 //第一个for循环一次循环确定一个最大的数 for(var n=0;n<=num.length-1-1;n++){ //里面的for循环是依次将两个相邻的数进行比较,直到比到前面已经比过的n个数为止(因为后面已经比过的数都已经确定是比前面的数大了,所以不用再比了,这样可以提升程序的执行效率) for(var m=0;m<=num.length-1-1-n;m++){ //if语句将两个相邻的数从小到大排好 if(num[m]>num[m+1]){ var x=0; x=num[m]; num[m]=num[m+1]; num[m+1]=x; } } } document.write(num); 选择排序 核心 : 找到最小值的索引,与起始位置交换数值,先找索引 在交换数值 代码: //选择排序跟冒泡排序的程序相近,但有本质的区别

用 Java 实现一个冒泡排序算法

无人久伴 提交于 2020-03-22 23:14:56
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将小数放前,大数放后,一直比较到最小数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。 冒泡排序最好的时间复杂度为 O(n),总的平均时间复杂度为 O(n^2),是一种稳定排序算法。 在编程实现中,一般用二重循环实现,外循环变量设为 i,内循环变量设为 j。外循环重复 n 次,内循环依次重复 n-1, n-2, ……, 1 次。每次进行比较的两个元素都是与内循环 j 有关的,它们可以分别用 a[j] 和 a [j+1] 标识,i 的值依次为 1, 2, ……, n,对于每一个 i,j 的值依次为 1, 2, ……, n-i,例如下面的代码: 1 for (int i = 0; i < arrys.length; i++) { 2 for(int j = 0;j < arrys

第一部分:趣味算法入门;第八题:冒泡排序(并与选择排序对比)

谁都会走 提交于 2020-03-21 23:05:32
100个不同类型的python语言趣味编程题 在求解的过程中培养编程兴趣,拓展编程思维,提高编程能力。 第一部分:趣味算法入门;第八题: 8.冒泡排序:对N个整数(数据由键盘输入)进行升序排序 冒泡排序的思想:首先从表头开始往后扫描数组,在扫描的过程中逐对比较相邻的俩个元素的大小。若相邻的两个元素中,前面的元素大于后面的元素,则将它们互换,称之为消去了一个逆序,在扫描的过程中不断的将两相邻元素中的大者往后移动,最后就将数组中的最大者换到了表的最后,然后在剩下的数组元素中(n-1)个元素重复上面的过程,将次小元素放到倒数第二个位置。不断重复以上过程,直到剩下的数组元素为0为止,此时数组就变成了有序。 常用的排序方法有:冒泡排序、选择排序、插入排序、快速排序和堆排序等。 我定义了冒泡排序和选择排序的函数,以比较两者排序方法的不同之处,其他排序方法还请自测。 #解题方法示例如下; def Maopao(list): #冒泡排序函数 for i in range(1,len(list)): for j in range(len(list)-i): if list[j] > list[j+1]: list[j],list[j+1] = list[j+1],list[j] return list def Xuanze(list): #选择排序函数 for i in range(len(list

冒泡排序

半腔热情 提交于 2020-03-20 23:41:39
3 月,跳不动了?>>> 1、思路 对每一对相邻的元素进行比较,比如第一个元素和第二个元素比较,若第一个大,则交换;然后第二个元素和第三次元素比较.......每次比较最大的元素都会放到后面。从而达到排序效果。 2、时间复杂度 最好 O(n) ,最坏 O(n^2) ,平均 O(n^2) 3、代码实现 public class BubbleSort { public static void bubbleSort(int[] arr){ if(arr.length == 0 ||arr == null) return; int n = arr.length; for(int i=0;i<n;i++){ for(int j=0;j<n-i-1;j++){ if(arr[j+1] < arr[j]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } public static void main(String[] args){ int[] arr = {50,10,90,30,70,40,80,60,20}; bubbleSort(arr); for(int a:arr){ System.out.printf(a + " "); } } } 来源: oschina 链接: https://my.oschina

C语言习题【10】冒泡排序

て烟熏妆下的殇ゞ 提交于 2020-03-20 23:31:57
冒泡排序(Bubble Sort) ,是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 #include<stdio.h> void sort(int arr[],int len) { int j = 0; for (j = 0; j < len - 1; j++) { int flag = 1; int i = 0; for (i = 0; i < len - 1 - j; i++) { if (arr[i] > arr[i + 1]) { int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; flag = 0; } } if (flag == 1) { break; } } } int main() { int arr[] = { 9,8,7,6,5,4,3,2,1,0 }; int len = sizeof(arr)/sizeof(arr[0]); sort(arr,len

[C++面试题]之冒泡排序

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-19 17:23:20
1、排序方法 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。 (1)初始 R[1..n]为无序区。 (2)第一趟扫描 从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].key<R[j].key,则交换R[j+1]和R[j]的内容。 第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。 (3)第二趟扫描 扫描R[2..n]。扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上…… 最后,经过n-1 趟扫描可得到有序区R[1..n] 注意: 第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该区中最轻气泡飘浮到顶部位置R[i]上,结果是R[1..i]变为新的有序区。 2、冒泡排序过程示例 对关键字序列为49 38 65 97 76 13 27 49

冒泡排序和选择排序

和自甴很熟 提交于 2020-03-19 11:22:18
冒泡排序思想:假定n个元素排序,需要进行n-1次比较,每趟比较每两两元素进行比较,每一趟比较取当前未排数据的最大值放在后面.无论原始数据的状态是怎样排的,时间复杂度都为O(N*N).(每一次排序的过程是将当前未排序数据的最大值放在后面) public class BubbleSort { public static void bubbleSort(int[] arr) { if(arr == null || arr.length < 2) { return ; } for(int right = arr.length - 1; right > 0; right--) { for(int i = 0; i < right; i++) if(arr[i] > arr[i+1]) swap(arr, i, i+1); } } public static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } public static void main(String[] args) { int[] arr = new int[] {4,1,2,6,3,9,8,7}; System.out.print("原始数组:"); for(int i = 0; i < arr

笔记:排序算法之冒泡排序

泄露秘密 提交于 2020-03-15 15:35:54
排序算法有哪些? 假设有一个没有任何排列顺序的电话号码簿(或笔记本)。当需要添加联络人和电话时,你只能将其写在下一个空位上。假定你的联系人列表上有很多人。某天,你要找某个联系人及其电话号码。但是由于联系人列表没有按照任何顺序来组织,你只能逐个检查,直到找到那个你想要的联系人为止。那得花多长时间啊? 需要组织信息集,比如那些存储在数据结构里的信息。最常用的排序和搜索算法,如冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序等算法。 冒泡排序: 冒泡算法在所有排序算法中最简单。从运行时间的角度来看,冒泡排序是最差的。冒泡排序比较所有相邻的两个项,如果第一个比第二个大,则交换它们。元素项向上移动至正确的顺序,就好像气泡升至表面一样,冒泡排序因此得名。 function bubbleSort(array, compareFn = defaultCompare) { const { length } = array; // {1} for (let i = 0; i < length; i++) { // {2} for (let j = 0; j < length - 1; j++) { // {3} if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) { // {4} swap(array, j, j +