排序算法
RuGuo_09
前端搬砖工
展开
-
快速排序
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。下面是本人的自己的总结:快速排序是一种不用额外空间的排序算法,操作的自己本身。要注意的是快速排序不是一种稳定的排序算法。快速原创 2016-04-15 10:50:24 · 334 阅读 · 0 评论 -
冒泡排序
冒泡排序(Bubble Sort): 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。是一种稳定和不需要额外空间的排序算法算法原理 1. 比较相邻的元素,如果第一个比第二个大,就交换,最后一个就是最大的元素; 2. 对剩余的n-1个元素重复1的步骤,又把第二大冒的倒数第二的位置,以此原创 2016-04-15 19:08:37 · 792 阅读 · 0 评论 -
简单选择排序
简单选择排序的基本思想是每一趟在n-i+1(i=0,1,2….n-1)个记录中选择关键字最小的记录作为有序系列的第i个记录。最大的特点是交换移动数据的次数相当少。 1. 简单选择排序的时间复杂度:O(n^2); 2. 简单选择排序是稳定的排序算法,不需要额外的空间。算法实现:#include <stdio.h>#include <stdlib.h>void simpleSelectSort原创 2016-04-17 00:02:30 · 362 阅读 · 0 评论 -
直接插入排序
直接插入排序(Insertion Sort)是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。直接插入排序的思想是: 在一个待排序的系列A[n] (n=0,1,2,3,4….n)中,默认A[i](i=0)为有序的,然后第i+1个记录,从后面向前扫描,找到合适的位置插入,然后合适位置后的元素往后移动。直接插入排序是一种稳定的排序算法;需要原创 2016-04-17 10:50:39 · 284 阅读 · 0 评论 -
希尔排序
希尔排序实质上是一种分组插入方法;比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比[2] 较就可能消除多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一原创 2016-04-17 17:34:00 · 343 阅读 · 1 评论 -
堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。 堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >原创 2016-04-18 18:45:57 · 305 阅读 · 0 评论 -
归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序的算法思想: 假设初始系列有n个待排序的记录,则可以看成n个有序的子序列,每个子序列长度为1;然后两两归并,得到n/2个长度原创 2016-04-19 15:31:34 · 403 阅读 · 2 评论