排序算法
文章平均质量分 71
大冰的小屋
这个作者很懒,什么都没留下…
展开
-
冒泡排序算法
基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序为止。 对于有n个元素的序列,最坏情况是要冒n-1趟,每趟选出一个最大的元素放在序列的末尾, 或最小的元素放在序列的头部,剩下的元素再次冒泡。 #include void swarp(int array1[], int i, int j){ int temp = array1[i]; array1[i]原创 2013-11-21 22:05:34 · 891 阅读 · 0 评论 -
快速排序算法---20世纪十大算法之一
基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行递归排序,以达到整个序列有序的目的。即任取待排记录的某一个记录(如第一个记录)作为基准,按照该记录的关键字大小将整个序列划分成左右两个子序列: 左侧的子序列中的所有记录的关键字都小于或等于基准记录的关键字 右侧的子序列中的所有记录的关键原创 2013-11-25 19:39:46 · 1209 阅读 · 0 评论 -
归并排序算法
归并排序就是利用归并的思想实现的排序方法。原理如图所示: #include #include void println( int a[], int len ){ int i = 0; for( i=0; i < len; i++ ) { printf("%d ", a[i]); } printf("\n");}void swap( int a[],原创 2013-12-12 20:58:21 · 748 阅读 · 0 评论 -
堆排序
堆排序是对简单选择排序的一种改进。堆排序可以做到每次在选择到最记录的同时,并根据比较结果对其他记录做出相应的调整,使得排序的总体效率非常高。而简单选择排序的每次比较都没保存下来。将待排序的序列的每个元素从1开始编号到N,将这些编号了的元素按层次遍历的方式组织成一个完全二叉树,例如一个序列是{50, 10, 90, 30, 70, 40, 80, 60, 20}构成的完全二叉树为:原创 2013-12-13 10:55:25 · 742 阅读 · 0 评论 -
选择排序和插入排序
选择排序的基本思想:每趟(如第i趟, i = 0, 1, 2,....n-2)后面的n-i个带排列的数据元素中选出关键字最小的元素,作为有序元素序列的第i个元素。#include void swarp(int array1[], int i, int j){ int temp = array1[i]; array1[i] = array1[j]; array1[j] = temp;原创 2013-11-21 22:28:38 · 922 阅读 · 0 评论 -
希尔排序算法---优化了的插入排序
基本思想:创造一些条件,使序列基本有序:小的关键字基本在前面,大的关键字基本在后面,不大不小的基本在中间。这样再进行直接插入排序时就会减少许多的移动操作。实现方式是将序列分成若干个子序列,此时对每个子序列进行直接插入排序,当整个序列都基本有序时,再对全体序列进行一次直接插入排序。 这里子序列的选取是通过一个跳跃分割的方式:将相距某个增量的记录组成一个子序列,(如每相距3个距离的记录组原创 2013-11-24 21:54:27 · 901 阅读 · 0 评论 -
桶排序
从《基于比较的排序结构总结 》中我们知道:全依赖“比较”操作的排序算法时间复杂度的一个下界O(N*logN)。但确实存在更快的算法。这些算法并不是不用“比较”操作,也不是想办法将比较操作的次数减少到 logN。而是利用对待排数据的某些限定性假设 ,来避免绝大多数的“比较”操作。桶排序就是这样的原理。桶排序的基本思想 假设有一组长度为N的待排关键字序列K[1....n]。首先转载 2014-06-17 22:09:56 · 895 阅读 · 0 评论