冒泡算法

常用算法(冒泡、插入、选择、快速)和二叉树详解

浪子不回头ぞ 提交于 2020-04-08 13:59:31
  同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。   计算机科学中,算法的 时间复杂度 是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号(Order)表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。 定义   在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。 算法复杂度   算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。 时间复杂度   1. 一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n)) 分析:随着模块n的增大,算法执行的时间的增长率和 f(n) 的增长率成正比,所以 f(n) 越小,算法的时间复杂度越低,算法的效率越高。   2.

HTML-冒泡算法

筅森魡賤 提交于 2020-04-01 06:57:10
冒泡算法详解 var arr7 = [22,11,5,3,4,100,9,10,89]; for (let n = 0; n < arr7.length; n++) { for (let j = 0; j < arr7.length-j; j++) { if (arr7[j]>arr7[j + 1]) { var temp = arr7[j] arr7[j] =arr7[j + 1]; arr7[j + 1] = temp; } } } console.log(arr7) 一个随机顺序数组,将其从小到大的顺序排列。 解题思路:   1.找出最大值,将其放置在数组的最末尾   2.找出第二大值,将其放置在最大数的左边   3.找出第三大值,将其放置在第二大值的左边   4.找出第四大值,将其放置在第三大值的左边   ...... 1.此时第几次操作为一个递增的操作,则使用一个 递增 循环: for (let n = 0; n < arr7.length; n++) {    循环体 } 循环次数为数组的长度,即数组内数的个数. 2.设:每次操作时比较的数的个数为m=arr7.length,最大比较次数为max,最小比较次数为min, 第一次操作,max=m-1,min=m-1 第二次操作,max=m-1,min=m-2 第三次操作,max=m-1,min=m-3 第四次操作,max

基本排序算法(冒泡,快排,插入,希尔,选择,归并)

人盡茶涼 提交于 2020-03-26 00:50:05
这篇文章仅仅为心中自证,不是算法教学,也不想误人子弟,谢谢各位。 第一章:一些感慨   我断断续续学习算法两年多了,这说起来是多么苦涩,是我笨嘛?一直不知道算法是什么东西。 从《算法导论》再到《C算法》不清楚看了多少遍,它们就是我过不去的坎吗?      不敢说什么大话,但是我有一个心得,学习算法,一定要理解,理解比会写更重要,会写,很有可能仅仅是记忆好, 但是过一段时间忘了, 就对这个算法完全没有印象了,我就是这样。   所以我以后学习算法,一定抱着理解的心态,理解了,就很好。 第二章:基本排序算法 2.1 冒泡排序   人们常说,冒泡排序是最初级的排序算法,人们说这句话的时候是从时间复杂度这个角度来说的,这么说或许没错, 但是,冒泡排序是相当漂亮的排序,这个“漂亮”是说,假如把排序算法可视化起来,x轴从小到大,依次对应0到n,y轴对应的是a[x], 然后排序开始了,你会发现冒泡很飘逸,看起来很赏心悦目,大概人们都喜欢美丽的泡泡吧。    冒泡排序的中心思想: 不写中心思想至少也有十年了吧,记得高中之后语文老师就不搞什么中心思想之类的。 但是我还是要写一写冒泡排序的中心思想,而且,现在我不看资料,我想描述一下,看一看我到底能不能描述。   冒泡排序的思想是这样的,从数组a[0]开始,比较相邻的两项的大小顺序,假如顺序不对,则交换两项。 5 4 6 3 2   比如上面的数组

选择排序算法和冒泡算法的区别

青春壹個敷衍的年華 提交于 2020-03-15 04:54:05
/选择排序法对数组中的n个数,由小到大排序 #include<stdio.h> main() { int n=10,i,b,a[10]; int sort(int array[],int n); // scanf("%d",&10); for(i=0;i<10;i++)//键盘输入数组元素 scanf("%d",&a[i]); sort(a,10);//调用函数 for(i=0;i<10;i++)//输出排序之后的函数 printf("%3d",a[i]); } //排序子函数错误!!!!这是冒泡的思想!!! //int sort(int array[],int n)//排序子函数 { int i,j,k,t; for(i=0;i<n-1;i++)//需要比较n-1次 { //k=i; for(j=i+1;j<n;j++)//第i次比较,与第i+1个数开始比较 { if(array[j]<array[i]) { t=array[i]; array[i]=array[j]; array[j]=t; } } } } //下面是正确的子函数 int sort(int array[],int n)//排序函数 { int i,j,k,t; for(i=0;i<n-1;i++)//需要比较n-1次 { k=i; for(j=i+1;j<n;j++)//第i次比较,与第i+1个数开始比较 if

冒泡算法

强颜欢笑 提交于 2020-03-06 20:58:28
算法:1.依次和相邻的数进行比较,如果头一个数更大,则替换,直到最大的值放在末尾 时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性:不稳定 package sort ; /** * 冒泡算法 * * 遍历排序元素,找到最大值,并放到最未位置 * * 空间复杂度0(1), 时间复杂度0(n2 ) * * 思考: 什么时候时间复杂度是 n * */ public class BubbleSort { public static void main ( String [ ] args ) { int [ ] a = { 3,1,9,8,2,6,5,4,7 } ; sort ( a ) ; print ( a ) ; } static void sort ( int [ ] a ) { for ( int i = a.length-1 ; i > 0 ; i-- ) { findMaxAndReplaceTo ( a,8 ) ; print ( a ) ; } } static void findMaxAndReplaceTo ( int [ ] a, int n ) { for ( int i = 0 ; i < n ; i++ ) { if ( a [ i ] > a [ i+1 ] ) swap ( a,i,i+1 ) ; } } static void swap ( int

NOIP需要掌握的内容(大致

旧街凉风 提交于 2020-03-02 11:41:13
1、 排序算法(快排、选择、冒泡、堆排序、 二叉排序树 、桶排序) 2、 DFS/BFS 剪枝 哈希表 3、树 ① 遍历 ② 二叉树 ③二叉排序树(查找、生成、删除) ④堆(二叉堆、左偏树、堆排序) ⑤Trie树 4、图(图论建模) ① 最小生成树 ② 最短路径 ③计算图的传递闭包 ④ 连通分量(其中要掌握并查集技术) 强连通分量tarjin ⑤ 拓扑排序 、关键路径 ⑥哈密尔顿环 ⑦ 欧拉回路 (USACO 3.3 题1 Fence) ⑧ Bell-man Ford、SPFA(能解决负权回路) (USACO 3.2 题6 Butter) ⑨二分图(匈牙利算法)(USACO 4.2 题2 stall) 5、动态规划(背包问题只是其中一种) ① 线性动规 ② 区间动规 ③ 树形动规 ④图形动规 6、 分治 (掌握了动规分治就好学了) 7、 贪心 8、 位运算 (可以用来进行优化) 来源: https://www.cnblogs.com/GldHkkowo/p/8710834.html

冒泡排序法

有些话、适合烂在心里 提交于 2020-02-25 18:44:19
using System; using System.Collections.Generic; using System.Text; namespace 程序算法 { /// <summary> /// 就是将一组数中最大的挑出来,像气泡一样向上升 /// /// 过程: /// 首先将一组数组中的第1个数与第2个数进行比较,若为逆序,则将连个记录交换,然后第2个与第3个数,以此类推,直至第n-1个数与第n个数比较完,将 /// </summary> public class 冒泡算法 { public void Sort( int [] arr) { int temp; for ( int i = 0; i < arr.Length; i++) // { for ( int j = 0; j < arr.Length - i-1; j++) { //if (arr[j] > arr[j + 1]) //和自己后面的一个元素进行比较 //{ // temp = arr[j]; // arr[j] = arr[j + 1]; // arr[j + 1] = temp; //} /*倒序排列*/ if (arr[j] < arr[j + 1]) { temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } } public

数据结构教程 冒泡算法

余生长醉 提交于 2020-02-11 07:19:47
经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | #include "iostream.h" main() { int a[6]={6,2,4,1,5,9}; for(int i=0;i<6;i++) { for(int j=0;j<6-i;j++) { if(a[j]>a[j+1]) { int temp=a[j+1]; a[j+1]=a[j]; a[j]=temp; } } for(int k=0;k<5;k++) { cout<<a[k]<<"|"; } cout<<endl; } }    第一趟排序(外循环) 第一次两两比较6 > 2交换(内循环) 交换前状态| 6 | 2 | 4 | 1 | 5 | 9 | 交换后状态| 2 | 6 | 4 | 1 | 5 | 9 | 第二次两两比较,6 > 4交换 交换前状态| 2 | 6 | 4 | 1 | 5 | 9 | 交换后状态| 2 | 4 | 6 | 1 | 5 | 9 | 第三次两两比较,6 > 1交换 交换前状态| 2 | 4 | 6 |

Python排序算法(二)——冒泡排序

无人久伴 提交于 2020-02-11 04:07:24
有趣的事,Python永远不会缺席! 如需转发,请注明出处: 小婷儿的python https://www.cnblogs.com/xxtalhr/p/10786904.html 一、冒泡排序(Bubble Sort)   冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,一层一层的将较大的元素往后移动,其现象和气泡在上升过程中慢慢变大类似,故成为 冒泡排序 。 1、原理 从第一个和第二个开始比较,如果第一个比第二个大,则交换位置,然后比较第二个和第三个,逐渐往后 经过第一轮后最大的元素已经排在最后,所以重复上述操作的话第二大的则会排在倒数第二的位置。 那重复上述操作n-1次即可完成排序,因为最后一次只有一个元素所以不需要比较 2、举例   举个例子,假设我现在有一个数列需要使用冒泡来排序 [11, 99, 33 , 69, 77, 88, 55, 11, 33, 36,39, 66, 44, 22],我们来看看使用冒泡的详细步骤: 首先11和99比较大小,99大,99继续和后面的作比较,直到最后一个元素,第一轮完了,列表是 [11, 33 , 69, 77, 88, 55, 11, 33, 36,39, 66, 44, 22, 99] 然后,重复第一轮操作,即第二轮比较列表是 [11, 33 , 69

python算法之排序

。_饼干妹妹 提交于 2020-02-07 23:25:04
#冒泡排序#基本思想:两两相邻记录的关键字,如果反序则交换,直到没有反序的记录为止#要点:1.两两注意是相邻的两个元素的意思# 2.如果有n个元素需要比较n-1次,每一轮减少1次比较# 3.既然叫冒泡排序,那就是从下往上两两比较,所以看上去就跟泡泡往上冒一样。def bubblesort(numList): leng = len(numList)-1 for i in range(leng): #i=0 for j in range(leng-i):#j=0,1,2,3,4,5,6 if numList[leng-j] < numList[leng-j-1]:#leng-j=6,leng-j-1=5 midnum = numList[leng-j] numList[leng-j] = numList[leng-j-1] numList[leng-j-1] = midnum print(numList) return numListprint(bubblesort([1,2,-1,8,6,7,-2]))# [-2, 1, 2, -1, 8, 6, 7] 从后往前,把最小的数排到前面,将-2冒泡到最前# [-2, -1, 1, 2, 6, 8, 7]# [-2, -1, 1, 2, 6, 7, 8]# [-2, -1, 1, 2, 6, 7, 8]# [-2, -1, 1, 2, 6,