排序算法
使用Python实现各种排序算法
3Sunremitting
优秀是一种习惯,堕落也是一种习惯
展开
-
插入排序又来啦(C/C++版)
直接上代码啦: 这个插入排序还是要理清思路,要不然还挺容易弄迷糊的。在写的时候最好向代码中那样命名。当前需要出入的元素命名为 current,该元素前一个的下标命名为 perIndex=i-1; 插入排序可以分为两层遍历:第一层遍历,从第一个元素到最后一个元素,把它插入到合适的位置。第二层遍历,针对要插入的第 i 个元素,从 i-1开始倒序,如果arr[perIndex]大于 current,则arr[perIndex+1]=arr[perIndex],即元素后移,给要出入的元素腾出位置。 #include原创 2020-06-17 20:43:55 · 67 阅读 · 0 评论 -
选择排序又来啦(C/C++版)
选择排序是最简单的排序方法,时间复杂度是O(n^2). 这里就不再介绍选择排序啦,直接上代码啦: #include<cstdio> #include<cstring> void SelectSort(int arr[]) { for(int i=0;i<8;i++) { int minIndex=i; for(int j=i+1;j<8;j++) { if(arr[minIndex]>arr[j]) { minIndex=j;原创 2020-06-17 16:29:48 · 68 阅读 · 0 评论 -
冒泡排序又来啦(C/C++版本)
这次就不介绍了,直接上代码喽: #include<cstdio> int main(){ int a[10]={0,3,1,6,8,2,4,9,5,7}; for(int i=1;i<10;i++){ for(int j=0;j<10-i;j++){ if(a[j]>a[j+1]){ int temp; temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for(int i=0;i原创 2020-06-14 12:03:11 · 94 阅读 · 0 评论 -
再谈快排(超简单代码)Python
今天看到了快排的另外一种写法,我的天呐,真的好简单,这种快排绝对是我见过最好理解的方法了。 我们知道,快排其实是每次给基准元素找到合适的位置。今天这种方法依然围绕这种核心,但是代码简单了很多。 快排的实现离不开分治法,利用分治的思想进行递归运算,从而实现快排。接下来开始进行介绍: 在进行递归时,我们有两个条件需要找到: 1、结束递归的基线条件 2、进行递归的递归条件 所谓基线条件,其实就是最简单的条件,不可再分的条件,拿排序来说,基线条件就是当数列中没有元素或者只有一个元素时是的情况,在这种情况下,根本不需原创 2020-06-05 20:34:43 · 3903 阅读 · 0 评论 -
最全排序算法汇总(Python)
最全排序算法汇总原创 2020-05-19 12:43:36 · 143 阅读 · 0 评论 -
十大排序算法之十:基数排序(Python)
一、基数排序简介 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按照每个位数分别比较。从最低位开始,依次进行一次排序,这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。(这是因为不顾是在哪一位进行排序,总是该位中数字最小的放在前面,所以当总的位数排序完,此时在数列最前面的一定是最小的数,之后依次增大。) 二、基数排序 vs 计数排序 vs 桶排序 这三种排序算法都利用了桶的概念,但是对桶的使用方法有明显差异。 基数排序:根据键值的每位数字来分配桶 计数排序:原创 2020-05-18 23:03:21 · 139 阅读 · 0 评论 -
十大排序算法之九:桶排序
一、桶排序简介 桶排序是计数排序的升级版,它利用了函数的映射关系,高效与否的关键在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到两点: 1、在额外空间充足的情况下,尽量增大桶的数量 2、使用的映射函数能够将输入的N个数据均匀的分配到K个桶中。 同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。 什么时候最快? 当输入的数据可以均匀的分配到每一个桶中,此时时间复杂度为O(n) 什么时候最慢? 当输入的数据被分配到了同一个桶中,此时时间复杂度为O(nlogn) 桶排序同样是一种线性原创 2020-05-17 22:23:56 · 233 阅读 · 0 评论 -
计数排序的优化
一、计数排序 计数排序是将序列中的数值转化为数组的下标,当数字a出现一次时,就把数组中对应a下标的值加1。这些数据需要存放在额外开辟的数组空间中(我们把该数组成为统计数组),计数排序的时间复杂度为线性的,它适用于在一定范围内的整数排序,在取值范围不是很大的情况下,它的性能可以超过那些时间复杂度为O(nlogn)的排序。 当待排序的数据为95、94、91、98、99、90、99、93、91、92时,我们还以数列的最大值来决定统计数组的长度时,要创建一个长度为100的数组,那么从0-89的位置空间就都浪费了。原创 2020-05-17 19:10:49 · 435 阅读 · 0 评论 -
十大排序算法之八:计数排序(Python)
一、计数排序简介 二、计数排序步骤 三、代码实现 一、计数排序简介 计数排序是将序列中的数值转化为数组的下标,当数字a出现一次时,就把数组中对应a下标的值加1。这些数据需要存放在额外开辟的数组空间中,计数排序的时间复杂度为线性的,它适用于在一定范围内的整数排序,在取值范围不是很大的情况下,它的性能可以超过那些时间复杂度为O(nlogn)的排序。 二、计数排序步骤 1、得到数列的最大值,作为申请数组空间的依据 2、根据数列最大值确定数组长度 3、遍历数列,填充数组 4、遍历数组,输出结果 三、代码实现 def原创 2020-05-17 00:25:44 · 261 阅读 · 0 评论 -
鸡尾酒排序(Python)
一、鸡尾酒排序简介 二、算法步骤 三、代码实现 一、鸡尾酒排序简介 冒泡排序是每个元素根据自身的大小,一点一点的向数组的一端进行移动,它是一个单向的运动,每一轮都是从左到右来比较元素。 鸡尾酒排序,也是属于冒泡排序的一种改进方法,它是每一轮进行两个方向的比较和移动,刚开始从左到右比较,确定出一个最大数,然后从右向左比较,确定出一个最小数。其实就相当于冒泡排序在一轮中从左到右排序后,再从右往左排序一次。这样可以减少排序回合数,但是代码量和冒泡排序相比要增加一倍。 鸡尾酒排序在大部分元素已经有序的情况下,才可以原创 2020-05-16 13:35:50 · 467 阅读 · 0 评论 -
十大排序算法之七:堆排序(Python)
一、堆排序简介 二、堆排序步骤 三、代码实现 一、堆排序简介 堆排序是指利用堆这种数据结构所设计的一种排序算法。堆有最大堆和最小堆,在堆排序中: 最大堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排序。 最小堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排序。 堆排序的时间负责度为O(nlogn) 二、堆排序步骤 1、构建堆,本例以最大堆为例,生成升序序列。所以先构建最大堆。 2、删除堆顶元素,把它替换到二叉堆的末尾,调整产生的新的堆顶。 注意:这里并不是真的删除堆顶元素原创 2020-05-16 01:17:36 · 138 阅读 · 0 评论 -
冒泡排序的两种改进方法(Python)
1、改进方法一 2、改进方法二 1、改进方法一 冒泡排序一般在进行到最后几轮时,有时会出现数据已经有序的情况,但是根据传统的冒泡排序算法,还是会进行比较。 比如有一列数据,在第六轮的时候是: 1、2、**3、5、6、7、8、9** 此时数据已经有序,但是仍然会进行第七轮排序: 1、**2、3、5、6、7、8、9** 在这种情况下,如果能够判断出数据已经有序,并且做出标记,那么剩下的几轮排序我们就不用进行了。 基于此,提出了第一种优化方法: 设立一个flag,当在遍历中没有元素发生交换时,说明该序列已经有序。原创 2020-05-16 00:16:00 · 1398 阅读 · 0 评论 -
十大排序算法之六:快速排序(Python)
一、快速排序简介 快速排序和冒泡排序一样也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。它是一种分而治之的思想在排序算法上的应用。快排是处理大数据最快的排序算法之一,不仅快而且效率高。 快速排序的核心就是确定基准(pivot)元素位置。简单的说就是选择一个基准元素,将比他小(或者相等)的数放在一边,比他大的数放到另一边,此时基准元素在其排好序后的正确位置,从而将数列拆成两个部分,再对这两个部分再递归上述方法。 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用原创 2020-05-11 22:02:27 · 189 阅读 · 0 评论 -
十大排序算法之五:归并排序(Python)
一、归并排序简介 归并排序是分治法的典型应用,它有两种实现方式,一种是自上而下的递归;还有一种的自下而上的迭代。 有人可能不清楚递归和迭代的区别,我在这里说一下: 递归:有大问题分解成小问题,大步骤分解成小步骤 迭代:与递归相反,由小问题层层解决,一直到解决了大问题。 这样说可能有些抽象,举个例子: 5!求解:要求5的阶乘就要先求出4的阶乘,求4的阶乘就要求3的阶乘,这样由上到下就是递归。 而迭代是递归的相反过程,先求1!,再求2!…一直迭代运算求到5!,自下而上是迭代。 它们两个很相似,但是还是不同的。原创 2020-05-10 19:11:20 · 171 阅读 · 0 评论 -
十大排序算法之四:希尔排序(Python)
一、希尔排序简介 希尔排序是简单插入排序的一种改进,也称递减增量排序算法,它属于插入排序,但是它是一种更高效的插入排序,而且非常稳定。同时,它是排序算法中时间复杂度冲破O(n^2)的第一批算法之一。 希尔排序与简单插入排序的区别: eg:[5,4,3,2,1,0] 对于这种倒序序列,数组末端的0要回到首位置很是费劲,比较和移动元素均需n-1次。而希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后对每个分组进行简单插入排序,随后逐步缩小增量,继续按组进行插入排序操作,直至增量为1。原创 2020-05-09 16:40:37 · 215 阅读 · 0 评论 -
十大排序算法之三:插入排序(Python)
一、插入排序简介 插入排序之所以叫插入排序,是因为它的排序方式是不断从未排序序列中取出一个数,插入到已排序序列的合适位置。就像是数组插入一样,需要不断的移动数据,如果要插入的这个数是在已排序的序列中间的话,就需要从中间往后的数据依次后后移一个位置,给新插入的元素腾位置。 它的原理是先构建一个有序序列,对于未排序数据,在已排序序列中从后向前扫面,找到对应位置并且插入。 二、插入排序步骤 1:首先把序...原创 2020-05-08 12:57:52 · 117 阅读 · 0 评论 -
十大排序算法之二:选择排序(Python)
一、选择排序概述 选择排序是一种比较简单的排序方法,时间复杂度为O(n^2),数据量较大时最好不要使用选择排序,这种排序方法只适合数据规模比较小的情况。 二、选择排序流程 选择排序就像我们平常从一堆数字中自己排序一样,只不过是把人类的行为进行了程序化的描述。 1、从待排序序列中选择一个最小(最大)的数字,放在序列头部; 2、从剩余序列中再选择一个最小(最大)的数字,放在刚刚已排序的序列尾部;重复,...原创 2020-05-07 17:21:05 · 130 阅读 · 0 评论 -
排序算法总结
总共有哪些算法,算法的特性以及时间复杂度等的介绍转载 2020-05-06 10:46:22 · 214 阅读 · 0 评论 -
十大排序算法之一:冒泡排序(Python)
最简单易懂的冒泡排序讲解原创 2020-05-06 09:05:18 · 264 阅读 · 0 评论