排序算法
燚涯
这个作者很懒,什么都没留下…
展开
-
冒泡排序
冒泡排序为稳定的排序,其时间复杂度最差和平均都为O(n2),空间复杂度为1void Maopao(int A[], int size);int main(void) { int A[] = {9,8,7,3,6,5,4,3,2,1}; int i, size = sizeof(A)/sizeof(int);Maopao(A, size);for(i = 0; i < size;原创 2015-05-31 22:41:05 · 274 阅读 · 0 评论 -
插入排序
插入排序有N-1趟排序组成,对于P=1趟到P=N-1趟,插入排序保证从位置0到位置P上的元素均为已排序的状态 插入排序为稳定的排序,其时间复杂度最差和平均都是O(n2),最好为O(n),空间复杂度为1void InsertSort(int Array[], int size);int main(void) { int A[] = {34,3,5,23,56,12,6}; in原创 2015-05-31 22:45:23 · 242 阅读 · 0 评论 -
归并排序
归并排序为稳定的排序,其时间复杂度最差、最好、平均的情况下均为O(nlogn),其空间复杂度为O(n) 归并排序的基本思想是:将两个按照由小到大排序的数组合并成一个数组,采用分治递归的策略。实现程序如下:include include原创 2015-05-31 22:29:24 · 306 阅读 · 0 评论 -
选择排序
选择排序为不稳定的排序,其时间复杂度最差和平均为O(n2),最好为O(n),空间复杂度为O(1) 选择排序类似于冒泡排序,不同之处是寻找未排序元素中最小元素的位置,从而确定最小元素并进行置换 void Selectsort(int A[], int size);int main(void) { int A[] = {1,9,8,7,2,6,5,4,3,2,1,5}; int原创 2015-06-02 16:18:03 · 294 阅读 · 0 评论 -
堆排序
堆排序是不稳定的排序,其时间复杂度最差、平均、最好均为O(nlogn),空间复杂度为1对大根堆排序得到的是递增序列(常用) 对小根堆排序得到的是递减序列♯define LeftChild(i) (2*(i)+1)void Swap(int *p, int *q); void PercDown(int A[], int FatherPos, int size);//堆排序功能子函数 void H原创 2015-06-01 22:10:10 · 653 阅读 · 0 评论 -
希尔排序
希尔排序又叫缩小增量排序,它通过比较相距一定间隔的元素来工作,各趟比较所用的距离(希尔增量)随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。 希尔排序为不稳定的排序,其时间复杂度为O(nlogn),空间复杂度为1void ShellSort(int A[], int size);int main(void) { int A[] = {9,8,7,6,5,4,3,2,1,3}原创 2015-06-01 16:17:34 · 299 阅读 · 0 评论 -
快速排序
快速排序采用的是分治递归的策略 (1)选取枢纽元:采用三数中值分割法来选取枢纽元,一般的做法是使用左端、右端和中心位置上的三个元素的中值作为枢纽元 (2)分割策略 首先,通过枢纽元与最后的元素交换,使得枢纽元离开要被分割的数据段(即i从第一个元素开始,而j从倒数第二个元素开始) 接着,在分割段要做的是把所有比枢纽元小的元素移到数组左边,而把所有比枢纽元大的元素移到数组的右边。原创 2015-05-31 23:01:36 · 371 阅读 · 0 评论