冒泡排序

【坐在马桶上看算法】小哼买书

梦想的初衷 提交于 2020-01-14 13:41:36
之前讲了三种常用的经典排序。排序算法还有很多,例如选择排序、计数排序、基数排序、插入排序、归并排序和堆排序等等。堆排序是基于二叉树的排序,以后再说吧。先分享一个超酷的排序算法的视频。 再来看一个具体的例子《小哼买书》来看看三个排序在应用上的区别和局限性。 小哼的学校要建立一个图书角,老师派小哼去找一些同学做调查,看看同学们都喜欢读哪些书。小哼让每个同学写出一个自己最想读的书的ISBN号(你知道吗?每本书都有唯一的ISBN号,不信话你去找本书翻到背面看看)。当然有一些好书会有很多同学都喜欢,这样就会收集到很多重复的ISBN号。小哼需要去掉其中重复的ISBN号,即每个ISBN号只保留一个,也就说同样的书只买一本(学校真是够抠门的)。然后再把这些ISBN号从小到大排序,小哼将按照排序好的ISBN号去书店去买书。请你协助小哼完成“去重”与“排序”的工作。 输入有2行,第1行为一个正整数,表示有n个同学参与调查(n<=100)。第2行有n个用空格隔开的正整数,为每本图书的ISBN号(假设图书的ISBN号在1~1000之间)。 输出也是2行,第1行为一个正整数k,表示需要买多少本书。第2行为k个用空格隔开的正整数,为从小到大已排好序的需要购买的图书ISBN号。 例如输入 10 20 40 32 67 40 20 89 300 400 15 则输出 8 15 20 32 40 67 89 300

选择排序和冒泡排序的实现

。_饼干妹妹 提交于 2020-01-14 06:30:06
   //选择排序 /*实现原理:数组的每一个数都和它后面的每一个数进行比较,找到从它本身到数组结束的最值(这里是最小值),把它和最值得位置进行交换。从而实现排序*/ @Test public void selectSort() { int[] nums = new int[] {4,8,5,7,6,2,4,9,5,7,3,5}; //定义一个无须数组 for(int i = 0; i < nums.length - 1; i++) { //因为数组的最后一位没有可以比较的了,所以取到数组的倒数第二位 for(int j = i+1; j < nums.length;j++) { //因为是每个数和它后面的数比较,所以从i+1的位置开始比较 if(nums[i] > nums[j]) { //控制升序排序,把大于改成小于就是降序排序 int temp = nums[i]; //交换位置操作 nums[i] = nums[j]; nums[j] = temp; } } } System.out.println(Arrays.toString(nums)); } //冒泡排序 /*实现原理:数组的每一个数都只和它后面的紧挨着的一个数进行比较,把两个数中较大的一个数挪到后面。   这样每一趟完整的比较,最大值都会被挪到最后面,从而实现升序排序*/ @Test public void

冒泡排序(C#)

时光总嘲笑我的痴心妄想 提交于 2020-01-14 06:25:18
冒泡排序(Bubble Sort),是一种 计算机科学 领域的较简单的 排序算法 。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 第一种实现方法: Default2.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="sa" runat="server

冒泡排序及其优化

…衆ロ難τιáo~ 提交于 2020-01-14 06:24:38
冒泡排序(Bubble Sort),是一种 计算机科学 领域的较简单的 排序算法 。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。(来自:百度百科) package learning; import java.util.Arrays; /** * 冒泡排序 * @author Lee * */ public class TestSort { public static void main(String[] args) { int[] a= {1,3,5,7,2,8,4}; System.out.println("排序前:"+Arrays.toString(a)); // Arrays.sort(a); // System.out.println("排序后:"+Arrays.toString(a)); System.out.println("#############"); bubbleSort(a); System.out.println("冒泡排序后:"+Arrays

排序算法(三人组加上快排)

我们两清 提交于 2020-01-14 06:21:56
冒泡排序 冒泡排序(Bubble Sort),是一种 计算机科学 领域的较简单的 排序算法 。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 def bubble_sort(li): for i in range(len(li)-1): for j in range(len(li)-i-1): if li[j]>li[j+1]: li[j],li[j+1]=li[j+1],li[j] return li print(bubble_sort([112,1245325,2342,323])) 选择排序 def select_sort(li): for i in range(len(li)-1): min_loc=i for j in range(i+1,len(li)): if li[j]<li[min_loc]: min_loc=j if li[min_loc]!=i: li[i],li[min_loc]=li[min_loc],li[i] return li print

Python3谈算法之冒泡排序

核能气质少年 提交于 2020-01-14 02:40:02
日期:2020年1月7日 作者:Commas 注释:用Python3写的第一个算法博客,纪念一下 如果您想了解更多有关Python的知识,那么请点 《我的Python浅谈系列目录》 文章目录 一、原理及思路 1、原理 2、思路 二、冒泡排序示例 1、常规版冒泡排序算法: 2、调用常规版冒泡排序并输出结果 3、优化版冒泡排序算法: 一、原理及思路 1、原理 ①若 从小到大 排序规则,则比较两个相邻的元素, 值大 的元素交换至右端,不断重复,直至 无元素交换位置 为止。 ②若 从大到小 排序规则,则比较两个相邻的元素, 值小 的元素交换至右端,不断重复,直至 无元素交换位置 为止。 2、思路 ① 两次遍历列表,分内外两层遍历; ② 内层遍历主要是将一个所谓的 “最大值” 送至右端,每次内层遍历结束,都会将一个 “最大值” 送至 “最右端” ,其次是遍历过程中,按照【原理】中的规则进行相邻值比较,会将所谓的 “较大值” 尽量往右端靠拢(值大交换,值小不变); ③外层遍历主要保证 每次循环 都进行了一趟“步骤②”的排序,产生一个所谓的 “最大值” 在所谓的 “最右端” ,当外层循环结束,则所有元素按照依次从小到大的顺序排列好。 注:“最大值”、“最右端”、“较大值”是相对而言,并非绝对存在,若不理解,可先参考输出结果理解;另外本思路是采用 从小到大 的排序规则进行解释的。 二、冒泡排序示例

C/C++版冒泡排序

霸气de小男生 提交于 2020-01-14 02:16:58
冒泡排序实现如下: # include <iostream> # include <string> using namespace std ; # define _Greater_ 0 //从大到小排序的状态码,用来指定排序是按照从大到小的顺序进行排序的 # define _Less_ 1 //从小到大排序的状态码,用来指定排序是按照从小到大的顺序进行排序的 //用constepr来替代上面宏定义的写法(此处已被注释) # if 0 constexpr int _Greater_ = 0 ; constexpr int _Less_ = 1 ; # endif //用枚举来替代上面宏定义的写法(此处已被注释) # if 0 enum Direction { _Greater_ = 0 , _Less_ = 1 } ; # endif //冒泡排序 template < typename DataType > void bubbleSort ( DataType * array , const int len , const int comp ) { //从大到小的顺序排列 if ( comp == _Greater_ ) { //循环去冒泡,依次将数组中的元素按照从大到小的顺序冒泡 for ( int j = 0 ; j < len - 1 ; ++ j ) { /

(9)冒泡排序

蓝咒 提交于 2020-01-13 23:30:38
文章目录 介绍 时间复杂度等 优化 代码 介绍 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让他俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。 时间复杂度等 1.冒泡排序是原地排序算法吗? 冒泡的过程只涉及相邻数据的交换操作,只需要常量级的临时空间,所以它的空间复杂度为 O(1),是一个原地排序算法。 2.冒泡排序是稳定的排序算法吗? 在冒泡排序中,只有交换才可以改变两个元素的前后顺序。为了保证冒泡排序算法的稳定性,当有相邻的两个元素大小相等的时候,不做交换,相同大小的数据在排序前后不会改变顺序,所以冒泡排序是稳定的排序算法。 3.冒泡排序的时间复杂度是多少? 最好情况时间复杂度是 O(n),最坏情况时间复杂度为 O(n2),平均情况下的时间复杂度就是 O(n2)。 优化 当某次冒泡操作已经没有数据交换时,说明已经达到安全有序,不用再继续执行后续的冒泡操作。 代码 // 冒泡排序,a 表示数组,n 表示数组大小 public void bubbleSort ( int [ ] a , int n ) { if ( n <= 1 ) return ; for ( int i = 0 ; i < n ; ++ i ) { // 提前退出冒泡循环的标志位 boolean

C++冒泡排序

别来无恙 提交于 2020-01-12 22:01:25
#include<iostream> using namespace std; int main() { int n,temp,m; int a[n]; cin>>n; for(int m=0;m<n;m++) cin>>a[m]; for(int i=1;i<n;i++){ //i是控制排序趟数 for(int j=0;j<n-i;j++){ //j是控制比较次数 if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for(int m=0;m<n;m++) cout<<a[m]; } 来源: https://www.cnblogs.com/luk-yu/p/12184678.html

冒泡排序

♀尐吖头ヾ 提交于 2020-01-12 17:15:56
题目描述 给定一个包含从0到n-1各一次的数组,若使用冒泡排序将其排为升序,问其中需要进行多少次交换 输入 测试数据有多组, 每组由两行组成:第一行包含正整数n(n <= 5000); 下一行包含从0到n-1的n个整数的序列。 输出 对于每组测试数据, 输出交换次数 样例输入 10 1 3 6 9 0 8 5 7 4 2 样例输出 22 提示 #include<iostream> using namespace std; int n; int count=0; void printarray(int *array) { count++; } int main() { while(cin>>n) { count=0; int *array=new int[n]; for(int i=0;i<n;i++) cin>>array[i]; for(int i=0;i<n-1;i++) { for(int j=0;j<n-1-i;j++) { if(array[j]>array[j+1]) { swap(array[j],array[j+1]); printarray(array); } } } cout<<count<<endl; delete []array; } return 0; } 来源: https://www.cnblogs.com/SZU-DS-wys/p/12183086