首页 > 代码库 > 排序算法总结
排序算法总结
关于排序算法的性能和稳定性总结,维基百科中文词条排序算法的总结很全面。
本文统一将数组从小到大排序。
1.插入排序
(1)直接插入排序,基本操作是将一个记录插入到已经排好序的的有序表中,从而得到一个新的,记录数曾1的有序表。
void InsertSort(int a [], int size){ int i,j,temp; for(i = 1; i < size; i++){ temp = a[i] if(j = i-1; temp < a[j] && j >=0; j--){ a[j+1] = a[j]; } a[j] = temp; } }
(2)折半插入排序
(3)希尔排序
2.交换排序
(1)冒泡排序
(2)快速排序。快速排序是冒泡排序的一种改进。它的基本思想是,通过一趟排序将排序记录分割成独立的两部分,其中一部分的关键字均比另一部分的关键字小,中间的枢轴点移动到它最后的位置。然后分别对左右两部分的记录继续排序,以达到整个序列有序。
void QuidSort(int a[], int size){ Qsort(a, 0 ,size-1);}void Qsort(int a[], int low, int hight){ int pivotloc if(low < high){ pivotloc = Partition(a, low, high); Qsort(a, low, pivotloc - 1); Qsort(a, pivotloc + 1, high); }}int Partition(int a[], int low, int high){ int pivotkey = a[low]; while(low < high){ while( low < high && a[high] >= pivotkey) --high; a[low]= a[high]; while(low < high && a[low] <= pivotkey) ++low; a[high] = a[low]; } a[low] = pivotkey; return low;}
3.选择排序
(1)简单选择排序
(2)堆排序
/* * File: main.cpp * Author: brownwn * * Created on 2015年1月14日, 下午3:07 */#include <cstdlib>#include <stdio.h>void HeapAdjust(int a[], int s, int m){ int rc = a[s]; int j; for(j=2*s;j<=m;j*=2){ if(j<m && a[j] < a[j+1]) ++j; if(rc >= a[j]) break; a[s] = a[j]; s = j; } a[s] = rc;}//int a[] 1-length,a[0] not use void heapSort(int a[], int length){ int i; for( i = length/2; i>0; --i){ HeapAdjust(a,i,length); } //此时a[1]最大 for(i = length; i > 1; --i){ //调整为大顶堆 int temp = a[1]; a[1] = a[i]; a[i] = temp; HeapAdjust(a,1,i-1); } // return a[1]; 可以返回第一个值,最大值。}int main(int argc, char** argv) { int a[7] = {0,1,5,8,10,6,20}; //注意这个数组,给索引1-7排序,所以长度为6。索引0的元素是没有用的。 heapSort(a, 6); for (int i = 1; i <= 6; i++){ printf("%d\n", a[i]); } return 0;}
4.归并排序
5.计数排序
排序算法总结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。