冒泡排序

动画 | 什么是鸡尾酒排序?

时光怂恿深爱的人放手 提交于 2020-01-27 14:49:53
鸡尾酒排序其实就是冒泡排序的变形,它的时间复杂度和冒泡排序一样,都是O(n^2),比快速排序要慢不少。 鸡尾酒排序的思想有点像摆钟一样,从左到右,又从右到左。而冒泡排序只是单向执行。 鸡尾酒排序也是交换排序,假设做一个升序排序,先从左到右,交换一趟把最大的数放置右边,然后从右到左,把最小的数放置左边。 视频动画 算法动画视频 地址 Code Result 初始状态 [5, 1, 9, 3, 7, 4, 8, 6, 2]从左到右发生交换 [1, 5, 9, 3, 7, 4, 8, 6, 2]从左到右发生交换 [1, 5, 3, 9, 7, 4, 8, 6, 2]从左到右发生交换 [1, 5, 3, 7, 9, 4, 8, 6, 2]从左到右发生交换 [1, 5, 3, 7, 4, 9, 8, 6, 2]从左到右发生交换 [1, 5, 3, 7, 4, 8, 9, 6, 2]从左到右发生交换 [1, 5, 3, 7, 4, 8, 6, 9, 2]从左到右发生交换 [1, 5, 3, 7, 4, 8, 6, 2, 9]从右到左发生交换 [1, 5, 3, 7, 4, 8, 2, 6, 9]从右到左发生交换 [1, 5, 3, 7, 4, 2, 8, 6, 9]从右到左发生交换 [1, 5, 3, 7, 2, 4, 8, 6, 9]从右到左发生交换 [1, 5, 3, 2, 7, 4, 8

冒泡排序

你说的曾经没有我的故事 提交于 2020-01-27 02:56:56
#include<stdio.h> #include<algorithm> using namespace std; void Bubblesort(int a[],int n) { int flag; for(int i=0; i<n-1; i++) { flag=0; for(int j=n-1; j>i; j--)///保证最小的那个数换到最前面 { if(a[j-1]>a[j]) { swap(a[j-1],a[j]); flag=1; } } if(flag==0) return; } } int main() { int a[100],n; scanf("%d",&n); for(int i=0; i<n; i++) scanf("%d",&a[i]); Bubblesort(a,n); for(int i=0; i<n; i++) printf("%d ",a[i]); printf("\n"); return 0; } 来源: CSDN 作者: 相似的人适合打闹 链接: https://blog.csdn.net/AYSXY/article/details/103112466

Java 冒泡排序

Deadly 提交于 2020-01-27 01:24:09
//用java实现一个冒泡排序算法 public class BubbleSort { public static void main ( String [ ] args ) { // TODO Auto-generated method stub int [ ] arr = { 3 , 5 , 7 , 1 , 8 , 11 , 9 , 13 } ; //定义数组 BubbleSort ( arr ) ; //开始排序 } //冒泡排序算法 public static void BubbleSort ( int [ ] arrays ) { //定义临时变量temp int temp = 0 ; //用j为下标,遍历数组 for ( int j = 0 ; j < arrays . length ; j ++ ) { //对每一个数组元素,从0到还未来排序的最大下标,总是把最大的数字放在后面 for ( int k = 0 ; k < arrays . length - j - 1 ; k ++ ) { if ( arrays [ k ] > arrays [ k + 1 ] ) { //判断当前数字与后面数字的大小 temp = arrays [ k ] ; arrays [ k ] = arrays [ k + 1 ] ; arrays [ k + 1 ] = temp ; /

js实现冒泡排序

陌路散爱 提交于 2020-01-26 21:30:47
js实现冒泡排序 例:对数组 { 5,4,3,2,1 } 进行冒泡排序(从小到大) 冒泡排序(通常使用数组方法): 是一种算法,将一系列的数据按照一定的顺序进行排列 冒泡排序的原理: 首先定义一个数组,将所有需要进行排序的数据放到数组里,数据的长度为数据的个数(以n个为例) 第一次循环:将n个数据中最大的数据放到数组的最后一个元素的位置上 第二次循环:将n-1个数据中最大的数据放到数组的倒数第二个元素的位置上 … 第i次循环::将n-i+1个数据中最大的数据放到数组的倒数第i个元素的位置上 … var arr=[ 5, 4, 3, 2, 1 ]; var temp; for(i = 1; i <= arr.length; i ++){ // 第i次循环 for(j = 0; j < arr.length - i - 1; j ++){ // 将n-i+1个数据中最大的数据放到数组的倒数第i个元素的位置上 if(arr[j] > arr[j + 1] ){ //交换两个变量的值 temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1]= temp; } } } console.log(arr); 来源: CSDN 作者: 爱学习的W 链接: https://blog.csdn.net/weixin_44001013/article/details

数据结构与算法之冒泡排序

落花浮王杯 提交于 2020-01-26 14:51:23
一、概念 冒泡排序(Bubble Sorting):通过对待排序序列从前往后,依次比较相邻元素的值,若发现逆序则交换,使值较大的元素主键从前移向后部,就像水底下冒泡一样逐渐往上冒。 通俗来讲就是:相邻元素对比,左边比右边大的话就换个位置,每轮对比下来就能确定一个最大值,第一轮最大值在最后位置,第二轮倒数第二大的值在倒数第二个位置上,以此类推,也就是需要对比的次数为数组长度-1,因为每次对比都能确定一个最大值,且放到最后。 二、图解 比如要冒泡如下数组:[3, 9, -1, 10, -2] 第一趟排序: [3,-1,9,-2,10] 第二趟排序: [-1,3,-2,9,10] 第三趟排序: [-1,-2,3,9,10] 第四趟排序: [-2,-1,3,9,10] 三、coding 1、lowb演示版 package com . chentongwei . struct . sort ; import java . util . Arrays ; /** * Description: * * @author TongWei.Chen 2019-12-30 17:18:26 */ public class BubbleSort { public static void main ( String [ ] args ) { int [ ] arr = { 3 , 9 , - 1 , 10

2019年春季学期第四周作业

旧街凉风 提交于 2020-01-26 11:14:27
这个作业属于哪个课程 C语言程序设计2 这个作业要求在哪里 2019年春季学期第四周作业 我在这个课程的目标是 我希望能够通过学习C语言的知识,实现编写类似“五子棋”的游戏。 这个作业在哪个具体方面帮助我实现目标 这个作业让我知道了选择排序法和冒泡排序算法,及其二者的区别,二维数组的定义和使用,让我对数组的知识更加深入的了解。 参考文献 排序算法 ; 冒泡算法 基础作业 题目 7-2 选择法排序 (20 分) 本题要求将给定的n个整数从大到小排序后输出。 输入格式: 输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。 输出格式: 在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。 输入样例: 4 5 1 7 6 输出样例: 7 6 5 1 1)实验代码 #include<stdio.h> int main() { int n,temp,i,j,index; int a[10]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(j=0;j<n-1;j++) { index=j; for(i=j+1;i<n;i++) { if(a[i]>a[index]) { index=i; } } temp=a[index]; a[index]=a[j]; a[j]=temp; }

冒泡排序也可以写出一些花样

你离开我真会死。 提交于 2020-01-25 05:47:36
场景 冒泡排序是简单的算法, 但是还是有些花样的 原理: 单趟扫描交换使最后一个元素永远是最大的, 扫描知到不需要发生交换 花样: 单趟扫描算法返回true表示剩下元素都是排过序的, 不需要继续循环 算法主体 // 单趟扫描交换算法主体算法 template<typename T> bool bubble(T &numbers, RANK low, RANK high) { bool sort = true; while (++low < high) { if (numbers[low - 1] > numbers[low]) { sort = false; swap(numbers[low], numbers[low - 1]); } } return sort; }; // 冒泡排序 [low, high)之间的元素进行排序 template<typename T> vector<T> bubbleSort(vector<T> numbers, RANK low, RANK high) { if (low < 0 || low > high || high > numbers.size()) { throw new exception(); } while (!bubble(numbers, low, high--)); return numbers; }; 运行例子

冒泡排序

和自甴很熟 提交于 2020-01-25 03:40:03
冒泡排序 冒泡排序的基本思想 每趟不断将记录两两比较,并按“先小后大”的规则进行交换。 例: 21 ,25 ,49 ,25*,16,08(注:星号为重复数字) 第一趟: 21 ,25 ,25*,16 ,08 , 49 第二趟: 21 ,25 ,16 ,08 , 25*,49 第三趟: 21 ,16 ,21 , 25 ,25*,49 第四趟: 16 ,08 , 21 ,25 ,25 ,49 第五趟: 08 , 16 ,21 ,25 ,25*,49 代码实现 # include <stdio.h> int main ( ) { int m , n , a [ 20 ] , i , j ; printf ( "请输入数据的个数:\n" ) ; scanf ( "%d" , & n ) ; printf ( "请输入数据\n" ) ; for ( i = 0 ; i < n ; i ++ ) scanf ( "%d" , & a [ i ] ) ; //主要代码 for ( i = 0 ; i < n ; i ++ ) { for ( j = 0 ; j < n - i - 1 ; j ++ ) if ( a [ j ] > a [ j + 1 ] ) { m = a [ j ] ; a [ j ] = a [ j + 1 ] ; a [ j + 1 ] = m ; } } for ( i

锵锵锵,又来了——冒泡排序

我的未来我决定 提交于 2020-01-24 16:44:23
虽然桶排序很方便,但是它非常浪费空间!!!在多大范围就要开多大的空间,seriously?! 所以,推出了一种新的算法:冒泡排序! 其思想就是比较相邻的两个元素,如果与题目不符就交换 如上图就是利用冒泡每次都与相邻的比较,最后在最后一位的就是最大的数,依次排列完成想法! 比较相邻的元素,如果前一个比后一个大,交换之。 第一趟排序第1个和第2个一对,比较与交换,随后第2个和第3个一对比较交换,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。 第二趟将第二大的数移动至倒数第二位 最后需要n-1次 #include <stdio.h> int main() { int a[100],i,j,t,n; scanf("%d",&n); //输入一个数n,表示接下来有n个数 for(i=1;i<=n;i++) //循环读入n个数到数组a中 scanf("%d",&a[i]); //冒泡排序的核心部分 for(i=1;i<=n-1;i++) //n个数排序,只用进行n-1趟 { for(j=1;j<=n-i;j++) //从第1位开始比较直到最后一个尚未归位的数。 { if(a[j]<a[j+1]) //比较大小并交换 { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for(i=1;i<=n;i++) //输出结果 printf("%d ",a[i]);

冒泡排序

拥有回忆 提交于 2020-01-24 03:21:18
/** * 冒泡排序 * 冒泡排序的思想就是每一趟排序都把大的元素往上浮, * 具体是这样:从当前待排序列第一个开始遍历,指针从第一个开始,如果当前元素大于下一个,那么二者交换, * 指针往后走,当走到待排序列末尾时,最大的一定被放到了最后(像冒泡泡一样上去了),然后缩小待排子序列(把最后一个从当前待排序序列删去), * 如此循环直到当前待排子序列只有一个元素。 * */ public static void main(String[] args) { int[] arr={49,38,65,97,76,13,27,49,78,34,12,64,1}; for(int i =1;i<arr.length;i++) { for(int j=0;j<arr.length-i;j++) { if(arr[j]>arr[j+1]) { int temp = arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } } 来源: CSDN 作者: dalong_bamboo 链接: https://blog.csdn.net/dalong_bamboo/article/details/103800215