
八大排序算法
夜神月233
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
直接插入法(C语言版本)
直接插入法的 原理是 将数组的数字 依次插入到 该数字位置之前的某个位置(之前的数字 已经按照某种大小顺序排列好)图例:具体的C语言代码:#include#includeint main(){ int a[] = {49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35原创 2017-07-11 20:29:06 · 2028 阅读 · 0 评论 -
希尔排序(C语言版本)
基本思想: 在某个数组中,先按照某个增量d(n/2,n为数组包含值的个数),分成若干组,选取每组相应的值,按照直接排序法排好顺数,将若干组组都排好顺序时, 然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成.代码:#include#include#includeint main(原创 2017-07-11 20:43:03 · 260 阅读 · 0 评论 -
简单选择排序(C语言版本)
基本思想:在数组中找到最小的数,将其放置到第一个位置,第二小的数,放在数组中的第二个位置,依次类推。在写代码的开始,竟然与冒泡法的原理混淆,需要注意。代码:#include#includeint main(){ int a[] = {1,54,6,3,78,34,12,45}; int n= 8; int i,j; for(i=0;i<n;原创 2017-07-11 20:55:39 · 1940 阅读 · 2 评论 -
堆排序(C语言版本)
基本思想:堆排序是一种树形选择排序,是对直接选择排序的有效改进。首先建立堆,其次将堆顶与堆的最后一个位置交换,重复前两步。难点在与每次堆的建立。每次建立都从数组的索引位置 (length/2 - 1)开始 到索引位置0为止,,确保父节点的值大于它的左右两个儿子(可能只有一个),依次类推。注意:因为是倒的排序,所以不需要严格意义上的堆,只要保证在当前的父节点比它的儿子大就能满足要求。代码原创 2017-07-11 20:57:11 · 207 阅读 · 0 评论 -
冒泡排序(C语言版本)
基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。代码:#include#include#includeint main(){ int a[] = {49,38,65,97,76,13,27,49,78,34,12原创 2017-07-11 21:33:03 · 292 阅读 · 0 评论 -
快速排序(C语言版本)
基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。代码:#include#include#includeint main(){ int a[] = {49,38,65,97,76,13,27,49原创 2017-07-11 21:38:40 · 242 阅读 · 0 评论 -
归并排序(C语言版本)
基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。代码:#include#includevoid merge_array(int *arr,int low,int mid,int high){ int k,i; int *temp =原创 2017-07-11 21:41:28 · 244 阅读 · 0 评论 -
基数排序(C语言版本)
基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。代码:#include#includeint getWidth(int *a,int n){ int flag = a[0]; int i; for(i=1;i<n;i原创 2017-07-11 21:44:56 · 357 阅读 · 0 评论