排序算法
Wonderfuldays_
快乐的程序员
展开
-
C#归并排序
归并排序其实就是将一个数组不断的进行一分为二,最终两边都只有一个数据时(一个数据当然有序)开始合并。代码如下:private static void MyMergeSort(int[] arr, int first, int last) { if (last > first) { int middle = (first + l...原创 2018-09-09 18:19:15 · 213 阅读 · 0 评论 -
C#快速排序
快速排序就是对于一个数组任取一个当做标志位(一般选择第一个),然后将比这个标志位大的数放在它的右边,小的放在它的左边,这样分为了两个区间,再分别对左右两个区间重复执行之前的步骤就是快速排序。代码如下: public static void QuickSort(int[] arr, int left, int right) { int l = left...原创 2018-09-09 18:30:42 · 115 阅读 · 0 评论 -
堆排序——贼容易理解
堆排序就是对一个完全二叉树进行排序,首先将数组构造成一个大顶堆(小顶堆也可以),大顶堆就是整个完全二叉树的第一个元素最大,然后将首位进行换位,最后在将下次要构造的大顶堆的长度-1,直到最后只剩一个元素的时候就排序OK了 ,代码如下:class Program { static void Main(string[] args) { ...原创 2018-09-18 20:48:39 · 119 阅读 · 0 评论 -
非递归的快速排序
对于非递归的快速排序,推荐使用栈,和递归的快速排序都是不断的去调整每次遍历的空间,并通过区间的目标值,一般取区间的第一个值来进行左右区间的划分,再递归调用Partition,和递归不同的是使用栈可以成对的进行管理区间,每次Partition都会都会得到一个目标值,这个目标值和你之前存储在栈中的区间范围可以做判断,当它和你的左区间长度大于2时,则认为可以进行下一次的Partition并入栈,同理当它...原创 2018-10-15 15:16:44 · 294 阅读 · 0 评论 -
经典排序算法——鸡尾酒排序
鸡尾酒排序就是冒泡排序改进的一种,不同于冒泡排序,鸡尾酒是双向的,它每一次都会先进行从左到右的升序排列,再从右到左的降序排列。就像: 2,4,10,3,33第一次:2,4,3,10,33第二次:2,3,4,10,33但是需要考虑的是他可能不需要到排完数组长度一半的次数就排完了,所以需要加一个判断符,每次只要不需要排序就break出来。先看看普通的冒泡排序:代码如下//...原创 2018-10-20 23:37:28 · 224 阅读 · 0 评论 -
Python 归并排序实现
归并排序实质就是不断的对一个数组进行左右区间的划分, 当划分到最小块的时候,则左右两边均只有一个元素时这个时候通过merge 将他们在该块进行排序合并。最后将排序好的块在写入原数组。然后一次进行更大块的合并。这样每次合并的两个块在各自的分组是有序的。因此合并只需要建立两个索引,一个指向左边的分区,一个指向右边的分区,然后进行赋值排序,当一个分区的索引移动到终点(左边终点是middle,右边终...原创 2019-09-29 11:54:46 · 190 阅读 · 0 评论