排序算法总结

《啊哈算法》读后总结(上)

心已入冬 提交于 2019-12-04 16:05:26
阅读时间 :2019.10.31-2019.11.11 阅读心得 : 这本书早有耳闻,但是一直没有落实去看,最近在给自己充电,于是把这本书看了一遍。总体来说,这本书写得很生动有趣,比较适合零基础的人入门,对于我来说内容有些简单(因为我本科已经接触过一些算法,里面的有些内容我之前已经掌握)。但是,这本书除了算法之外,带给我最大的帮助就是更加熟悉了一点C,因为我的C语言不太好,一直都是学习java,比较逃避C,但是在学习这本书的时候,我把里面出现的所有代码都自己消化并手写了一遍,虽然里面的代码十分浅显,但是一本书写下来,我已经对C没有那么恐惧了。所以,我从心里很喜欢这本书。希望想要入门的小伙伴也能把这本书好好看一看。 阅读总结 : 【这本书一共有九章,第九章是一个思路引领,前八章是妥妥的干货。在这里我对这本书的内容,结合自己的理解做一些记录,方便日后能够复习】 第一章:排序 (有多重要大家心里都知道,不会排序的人生是不完整的人生~) 1.桶排序 说实话,我是在这本书里第一次接触桶排序,之前学的排序算法上来都是直接选择、插入、快速、合并,看了这本书才知道还有桶排序这个神奇宝贝哈哈哈。桶排序堪称最快最简单的排序,它的原理是定义一个数组book[]来标记数字是否出现。比如我们现在要对从1到99之间的若干数字进行排序,那么就定义一个数组book[],每出现一个数字 i,就让对应的book[i

三、排序算法总结(C++版本)

偶尔善良 提交于 2019-12-04 14:07:49
一、引言   对于各种排序算法也算是有了一定的了解,所以这里做一个总结。 二、冒泡排序法。 这是比较经典的排序算法,主要是通过内外两层的循环比较,使得乱序变为顺序。   下面是一个测试代码 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 int main() 5 { 6 vector<int> L(10); 7 for(int i=0;i<L.size();i++) 8 { 9 L[i] = 10 - i; 10 } 11 int temp = 0; 12 for (int i = 0; i < L.size(); i++) 13 for (int j = L.size()-1; j >= (i+1); j--) 14 { 15 if (L[j-1] > L[j ]) 16 { 17 temp = L[j]; 18 L[j] = L[j - 1]; 19 L[j - 1] = temp; 20 } 21 } 22 for (int j = 0; j < L.size(); j++) 23 { 24 cout << "the number is " << L[j] << endl; 25 } 26 } View Code   初始化为10-1,最后冒泡排序法的的结果为升序排列。  

关于八大基本排序方法的总结(c++版)

拥有回忆 提交于 2019-12-03 11:43:02
#include <iostream> #include <ctime> using namespace std; /*** * 排序算法的总结: * 排序分为稳定排序和不稳定排序 * 稳定排序:相同的值的位置在排序过程中不会发生改变 * 非稳定排序:相同的值的相对位置也许会在算法结束时产生变动 * 1、冒泡排序:什么叫冒泡排序?O(n^2) * 主要的思想就是:1>、每次比较相邻的元素,如果前者大于后者就将它们的值进行交换 * 依次循环n-1次就行--->因为每次循环都把最大的元素放在了最后面,n-1次后最前面的元素自然是最小的了 * 下面是主要的逻辑代码: * for(int i=0;i<9;++i) { for(int j=0;j<9;++j) { if(arr[j]>arr[j+1]) swap(arr[j],arr[j+1]); } } *2、接下来介绍的就是选择排序法: × 应用范围:适合于小规模的排序算法中,因为它的时间复杂度为n^2,每次都要循环遍历一遍数组才能确定一个值,如果有n个值每个数都要进行n次循环,从而算法的时间复杂度为n*n=n^2 *何为选择排序法呢?------>所谓的选择就是从第n个元素开始 * 每次从n后的数组中找到一个最小或者最大的元素与第n个元素进行交换 * 从而可以确保最前面的元素一定是最小的元素,依次往后增加 * 下面是主要的逻辑代码:

排序算法总结

匿名 (未验证) 提交于 2019-12-02 23:55:01
#include <iostream> #include <list> #include <sstream> #include <map> #include <set> #include <queue> #include <map> #include <functional> #include <algorithm> #include <stack> #include <ctime> using namespace std; //冒泡排序(n2) //相邻元素交换,未交换结束,每次减1 void buble_sort(int a[], int n) { bool flag; do { flag = false; for (int j = 1; j < n; j++) { if (a[j - 1]>a[j]) { swap(a[j], a[j - 1]); flag = true; } } n--; } while (flag); } //插入排序,有序序列和无序序列,o(n*2),稳定 //从1开始依次和前面的有序序列相比,找到合适的插入位置插入 void insert_sort(int a[], int n) { int t,i,j; for (i = 1; i < n;i++) { t = a[i];//要插入的位置 for (j = i; j>0&&a[j-1]>t;j--)

各种排序算法总结

感情迁移 提交于 2019-12-02 20:06:32
排序算法 时间复杂度(最好) 时间复杂度(最坏) 时间复杂度(平均) 空间复杂度 稳定性 冒泡排序 O(N) O(N 2 ) O(N 2 ) O(1) 稳定 选择排序 O(N 2 ) O(N 2 ) O(N 2 ) O(1) 不稳定 插入排序 O(N) O(N 2 ) O(N 2 ) O(1) 稳定 希尔排序 取决于增量序列 O(N 2 ) 取决于增量序列 O(1) 不稳定 快速排序 O(N 2 ) O(NlogN) O(NlogN) O(logN) 不稳定 归并排序 O(NlogN) O(NlogN) O(NlogN) O(N) 稳定 堆排序 O(NlogN) O(NlogN) O(NlogN) O(1) 不稳定 计数排序 桶排序 冒 泡排序 冒泡排序是不断比较相邻两个元素,并不断交换,最后把大的放到数组后面。第一趟遍历会把最大的元素放到(n-1)位置,第二趟遍历会把第二大的元素放到(n-2)的位置,以此类推。 public int[] sortArray(int[] nums) { for(int i = 0; i < nums.length - 1; i++) { boolean isSorted = true; for(int j = 0; j < nums.length - i - 1; j++){ if(nums[j] > nums[j + 1]) { swap

C++面试中的排序算法总结

梦想与她 提交于 2019-12-02 06:48:56
查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。 面试官对于这些排序可能会要求比较各自的优劣、各种算法的思想及其使用场景。还有要会分析算法的时间和空间复杂度。通常查找和排序算法的考察是面试的开始,如果这些问题回答不好,估计面试官都没有继续面试下去的兴趣都没了。所以想开个好头就要把常见的排序算法思想及其特点要熟练掌握,有必要时要熟练写出代码。 接下来我们就分析一下常见的排序算法及其使用场景。限于篇幅,某些算法的详细演示和图示请自行寻找详细的参考。 冒泡排序 冒泡排序是最简单的排序之一了,其大体思想就是通过与相邻元素的比较和交换来把小的数交换到最前面。这个过程类似于水泡向上升一样,因此而得名。举个栗子,对5,3,8,6,4这个无序序列进行冒泡排序。首先从后向前冒泡,4和6比较,把4交换到前面,序列变成5,3,8,4,6。同理4和8交换,变成5,3,4,8,6,3和4无需交换。5和3交换,变成3,5,4,8,6,3.这样一次冒泡就完了,把最小的数3排到最前面了

C++实现——排序算法总结

蓝咒 提交于 2019-12-02 06:48:21
/* 常见的排序算法有:直接插入 希尔 冒泡 快速 选择 堆排序 归并 基数 */ //下面一一分析,并实现: /* 1.冒泡排序 冒泡排序是最简单的排序算法,冒泡排序的基本思想是从后往前(或从前往后)两两比较相邻元素的值,若为逆序,则交换它们,直到序列比较完毕。我 们称它为一趟冒泡。每一趟冒泡都会将一个元素放置到最终的位置上。 */ //从前往后遍历,保证排好序的放到右侧 void BubbleSort_from_0( vector < int > & nums){ int n = nums.size(); //一共进行n-1趟 for ( int i = 0 ; i < n - 1 ; i++){ //注意j的起点和终点 for ( int j = 1 ; j < n - i; j++){ if (nums[j] < nums[j - 1 ]){ swap(nums[j], nums[j - 1 ]); } } } } //从后往前遍历,保证排好序的放到左侧 void BubbleSort_from_n( vector < int > & nums){ int n = nums.size(); //一共进行n-1趟 for ( int i = 0 ; i < n - 1 ; i++){ //注意j的起点和终点 for ( int j = n- 1 ; j >i; j--){

冒泡排序

て烟熏妆下的殇ゞ 提交于 2019-12-01 19:55:14
今天抽出来点时间来总结总结冒泡排序,这种算法是最常见也比较简单易懂的排序算法。排序口诀:n个数字来排序,两两比较小靠前,外层循环n-1,内层循环n-1-i 来源: https://www.cnblogs.com/HTLucky/p/11715532.html

转 常用十大排序算法总结

落爺英雄遲暮 提交于 2019-12-01 10:10:27
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/MLcongcongAI/article/details/88081244 排序算法 0. 算法概述 0.1 算法分类 0.2 算法复杂度 0.3 总结 1. 冒泡排序 1.1 算法描述 1.2 算法分析 1.3 动图演示 1.4 代码实现 2. 选择排序 2.1 算法描述 2.2 算法分析 2.3 动图演示 2.4 代码实现 3. 插入排序 3.1 算法描述 3.2 算法分析 3.3 动图演示 3.4 代码实现 4. 希尔排序 4.1 算法描述 4.2 算法分析 4.3 动图演示 4.4 代码实现 5. 归并排序 5.1 算法描述 5.2 算法分析 5.3 动图演示 5.4 代码实现 6. 快速排序 6.1 算法描述 6.2 算法分析 6.3 动图演示 6.4 代码实现 7. 堆排序 7.1 算法描述 7.2 算法分析 7.3 动图演示 7.4 代码实现 8. 计数排序 8.1 算法描述 8.2 算法分析 8.3 动图演示 8.4 代码实现 9. 桶排序 9.1 算法描述 9.2 算法分析 9.3 动图演示 9.4 代码实现 10. 基数排序 10.1 算法描述 10.2 算法分析 10.3 动图演示 10.4 代码实现

排序算法总结

瘦欲@ 提交于 2019-12-01 07:12:02
排序算法说明 1.1 排序的定义: 对一序列对象根据某个关键字进行排序。 1.2 属于说明: 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定 :如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序 :所有排序操作都在内存中完成; 外排序 :由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度 :运行完一个程序所需内存的大小。 1.3 算法总结 图片名词解释: n: 数据规模 k: “桶”的个数 In-place: 占用常数内存,不占用额外内存 Out-place: 占用额外内存 1.4 算法分类 1.5 比较和非比较的区别 常见的 快速排序、归并排序、堆排序、冒泡排序 等属于 比较排序 。 在排序的最终结果里,元素之间的次序依赖于它们之间的比较。每个数都必须和其他数进行比较,才能确定自己的位置。 在 冒泡排序 之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²)。在 归并排序、快速排序 之类的排序中,问题规模通过 分治法 消减为logN次,所以时间复杂度平均 O(nlogn) 。 比较排序的优势是,适用于各种规模的数据,也不在乎数据的分布,都能进行排序。可以说, 比较排序适用于一切需要排序的情况。 计数排序、基数排序、桶排序 则属于