冒泡排序

java常用算法

不打扰是莪最后的温柔 提交于 2020-03-11 04:59:14
java常用排序,程序员必会的排序问题:http://www.cnblogs.com/qqzy168/archive/2013/08/03/3219201.html Java实现面试常考的算法 查找算法 排序算法 插入排序 选择排序 冒泡排序 快速排序 Java实现面试常考的算法 我自己总结了几个平时面试问得一些 算法 题, 都是非常非常基础的问题. 查找算法 典型的二分查找 对于二分查找算法要求, 查找前的数据必须是已经排好序的, 然后得到数组的开始位置start和结束位置end, 取中间位置mid的数据a[mid]跟待查找数据key进行比较, 若 a[mid] > key, 则取end = mid - 1; 若 a[mid] < key, 则取start = mid + 1; 若 a[mid] = key 则直接返回当前mid为查找到的位置. 依次遍历直到找到数据或者最终没有该条数据. 啰嗦这么多, 上代码!!! //已经排好序的数组 public static int binarySearch(int[] nums, int key) { int start = 0; int end = nums.length - 1; int mid = -1; while (start <= end) { mid = (start + end) / 2; if (nums[mid] ==

【洛谷P6186】[NOI Online 提高组] 冒泡排序

强颜欢笑 提交于 2020-03-09 18:37:23
题目 题目链接: https://www.luogu.com.cn/problem/P6186 给定一个 \(1 ∼ n\) 的排列 \(p_i\) ,接下来有 \(m\) 次操作,操作共两种: 交换操作:给定 \(x\) ,将当前排列中的第 \(x\) 个数与第 \(x+1\) 个数交换位置。 询问操作:给定 \(k\) ,请你求出当前排列经过 \(k\) 轮冒泡排序后的逆序对个数。 对一个长度为 \(n\) 的排列 \(p_i\) 进行一轮冒泡排序的伪代码如下: for i = 1 to n-1: if p[i] > p[i + 1]: swap(p[i], p[i + 1]) 思路 观察冒泡排序的伪代码,容易发现每一轮冒泡排序,会把最大的数移动到最后面,设 \(cnt[i]\) 表示第 \(i\) 个数前严格大于他的数字个数,手画一下可以发现,一轮冒泡排序会把每一个 \(cnt[i]>1\) 的 \(cnt[i]-1\) ,对于 \(cnt[i]=0\) 的不变。 那么对于一个查询 \(k\) 轮冒泡排序之后的逆序对个数的操作,设冒泡前的逆序对数量为 \(sum\) ,那么 \(k\) 轮排序后: 若 \(cnt[i]\leq k\) ,那么 \(cnt[i]\) 会清零,这一部分减少了 \(\sum_{cnt[i]\leq k} cnt[i]\) 个逆序对。 若 \(cnt

冒泡排序

扶醉桌前 提交于 2020-03-09 15:17:39
import java.util.Arrays;public class SortDemo { public static void main(String[] args) { int[] ary=new int[]{8,2,5,7,3,1}; //从小到大排序,并输出 //Arrays.sort(ary); bubble(ary); System.out.println(Arrays.toString(ary)); } public static void bubble(int[] ary){ //冒泡排序 for(int i=0;i<ary.length-1;i++){ //i是比几轮,(length-1)轮 for(int j=0;j<ary.length-1-i;j++){ //-i意思是最大的数在第一轮就到了最底下,下一轮就不用比了 if(ary[j]>ary[j+1]){ int t=ary[j]; ary[j]=ary[j+1]; ary[j+1]=t; } } } }} 来源: https://www.cnblogs.com/jerry201907/p/12448243.html

Java冒泡排序

时间秒杀一切 提交于 2020-03-09 08:50:22
1.冒泡排序简介 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 2.代码示例 public class demo { public static void main ( String [ ] args ) { int [ ] a = new int [ ] { 1 , 5 , 3 , 9 , 4 } ; for ( int i = 0 ; i < a . length - 1 ; i ++ ) { for ( int j = 0 ; j < a . length - 1 - i ; j ++ ) { if ( a [ j ] > a [ j + 1 ] ) { int temp = a [ j ] ; a [ j ] = a [ j + 1 ] ; a [ j + 1 ] = temp ; } } } System . out . println ( "从小到大排序后:" ) ; for ( int k = 0 ; k < a . length ; k ++ ) { System . out . print ( a [ k ] ) ; } } } 来源:

Java中的经典算法之冒泡排序

荒凉一梦 提交于 2020-03-08 09:14:02
原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。 第一趟比较完成后,最后一个数一定是数组中最大的一个数,所以第二趟比较的时候最后一个数不参与比较; 第二趟比较完成后,倒数第二个数也一定是数组中第二大的数,所以第三趟比较的时候最后两个数不参与比较; 依次类推,每一趟比较次数-1; …… 举例说明:要排序数组:int[] arr={6,3,8,2,9,1}; 第一趟排序:     第一次排序:6和3比较,6大于3,交换位置: 3 6 8 2 9 1     第二次排序:6和8比较,6小于8,不交换位置:3 6 8 2 9 1     第三次排序:8和2比较,8大于2,交换位置: 3 6 2 8 9 1     第四次排序:8和9比较,8小于9,不交换位置:3 6 2 8 9 1     第五次排序:9和1比较:9大于1,交换位置: 3 6 2 8 1 9     第一趟总共进行了5次比较, 排序结果: 3 6 2 8 1 9 ------------------------------------------------------

js 排序:sort()方法、冒泡排序、二分法排序。

梦想的初衷 提交于 2020-03-06 21:43:00
js中的排序,这里介绍三种,sort()方法、冒泡排序、二分法排序。 1、sort方法 写法: 数组.sort(); 返回排好序的数组,如果数组里是数字,则由小到大,如果是字符串,就按照第一个字符的字符编码大小排序。 写法2: 数组.sort(function(a,b){ return a-b }); 表示从大到小,(如果写 retrun b-a 则由大到小排序); 不详细解释了。 2、冒泡排序。 原理是,直接将原理可能不好懂,我们还是按照下面的方法去讲吧,这样容易懂些。 //冒泡排序function quickSort(arr){ for(var i=0; i<arr.length-1; i++){ console.log(i); for(var j=0; j<arr.length-i-1; j++){ if(arr[j] > arr[j+1]){ var oldVal = arr[j]; arr[j] = arr[j+1]; arr[j+1] = oldVal; } } } } 我们假设要排序的数组是arr = [10, 8, 7, 6]; 原理: 这里arr长为3,外层循环三次,当外层for循环第一次循环的时候,即i=0的时候,进入里层循环,这时候将arr循环3次(4-0-1 = 3),即将arr的第一个数挨个于后面三个数比较,如果它大于后面的某个数,就与其交换位置

数据结构与算法 python--第五节 排序(二)选择排序

↘锁芯ラ 提交于 2020-03-06 02:08:24
文章目录 5 排序 5.1 冒泡排序 5.2 选择排序 选择排序分析 自己初步实现的代码 实现代码(正确) 5 排序 5.1 冒泡排序 数据结构与算法 python–第五节 排序(一)冒泡排序 5.2 选择排序 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。 选择排序分析 排序过程:(此处以选择最大元素为例,代码实现为选择最小元素) 自己初步实现的代码 def select_sort ( alist ) : n = len ( alist ) for j in range ( n - 1 ) : for i in range ( j + 1 , n ) : if alist [ j ] > alist [ i ] : alist [ j ] , alist [ i ] = alist [ i ] ,

排序算法的步步解析

眉间皱痕 提交于 2020-03-06 00:07:14
总结镇楼:只讲自己的细节 1.冒泡排序:比较两个相邻的元素,将值大的元素交换到右边 代码如下:核心思想:第二次循环中数组元素的两两比较,再重复这个循环数组长度次 public static int[] maopao(int[] arrs){ int length=arrs.length; int temp; if(length==0){ return arrs; } //第一个循环是让比较的遍数进行到“数组长度次” for (int i=0;i<length;i++) { /*/ 冒泡排序的两两比较具体步骤只需用一个循环,因为最佳的状况时其时间复杂度为n 这里需要注意的是第二个循环的长度,冒泡排序发每次循环都会得出一个数组中剩余数的最大值放到后面 因此每次循环都会使循环的次数减一,而最多经历数组长度次的循环之后整个数组就会排序完毕 */ for (int j=0;j<length-1-i;j++){ //简单的三方转换 if (arrs[j]>arrs[j+1]){ temp=arrs[j+1]; arrs[j+1]=arrs[j]; arrs[j]=temp; } } } return arrs; } ----------------------------------------------- 2.选择排序:从头到尾扫描一遍数组,将其中的最小值放到最前面,

C算法--冒泡排序(一维数组)

可紊 提交于 2020-03-05 12:42:56
交换两个数的基本逻辑 1 #include <stdio.h> 2 3 int main(){ 4 int a[10]={3,1,4,5,2}; 5 int i,j,k; 6 for(i=1;i<=4;i++) {//进行n-1次比较 7 //从i趟时从a[0]到a[n-i-1]都与他们下一个数比较 8 for (j=0;j<5-i;j++){ 9 10 if(a[j]>a[j+1]){ 11 12 int temp=a[j]; 13 a[j]=a[j+1]; 14 a[j+1]=temp; 15 } 16 } 17 } 18 for(k=0;k<5;k++){ 19 printf("%d",a[k]); 20 } 21 return 0; 22 } 冒泡排序 来源: https://www.cnblogs.com/Catherinezhilin/p/11132623.html

三七互娱笔试题

橙三吉。 提交于 2020-03-04 12:50:07
明天下午就要参加三七互娱的前端笔试了,但是心里没底,没有做过题,所以今天恶补一下。一下题目均为三七互娱前端题 一、用js写出一个冒泡排序算法。 看到这个题我是懵的,因为冒泡排序我已经忘了具体是啥了。 知识点:冒泡排序算法 首先解释一下冒泡排序算法:好比有一个水缸,现在有 N 个水泡在里面,并且杂乱无章的竖直排列。然后因为自然规律,水泡大的会先浮出来。所以算法来了,就是从水缸底部开始依次比较,如果最底部的大于它上面的那个,就往上浮动,然后小的那个就被挤下去。如此,就两两比较,直到最大的到最上面,第一轮结束。第二轮,又从最底部开始,与上相同,直到重复了 N-1 次。 其实跟以前学C语言做那种有形状的字母排序是一个道理。核心就是有一个空的地方可以存放大的,然后换位置。 let bubbleSort=array=>{ let len=array.length let temp for(let i=0;i<len-1;i++){ for(let j=0;j<len-1-i;j++){ if(array[j]>array[j+1]){ temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } } } } let array=[1,2,3,6,8,5,4] console.log(bubbleSort(array)) //1234568 二