八大内部排序算法总结
1,直接插入排序(插入排序的一种),原理:从第二个数开始,第n个数插入到前面 n - 1 个数里面,以合适的顺序,直到最后一个数;
2,希尔排序(Shell 排序,最小增量排序,插入排序的一种),第一个增量为 n/2,第二个增量为 第一个增量/2,如果前一个增量为奇数,则第二个增量就是 前一个增量/2 的四舍五入,直到增量为1,排序是这样的,从第一个数开始,第n个数与第(n+增量)个数进行比较,前者大于后者则交换,直到增量为1,然后进行直接插入排序;
3,简单选择排序(直接选择排序,选择排序的一种),在要排序的数组中,选最小的一个数与第一个数交换,然后选除第一个数外的其他数中的最小的数与第二个数交换,以此类推,直到倒数第二个数被交换;
4,堆排序(选择排序的一种),堆的结构可表现为完全二叉树,堆的定义如下:具有n个元素的序列(h1,h2,…,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,…,n/2)时称之为堆。排序的过程为,建堆,然后把堆顶元素取出,对顶元素为堆中的最大的数,然后把去掉最大数的数据建堆,再把堆顶元素取出,以此类推,直到剩下一个元素;
5,冒泡排序(交换排序的一种),有未排序的数组,自下向上地比较相邻的两个数,较大的往下沉,较小的往上冒,第一轮过后,最小的数放在最上面,然后除最小数的 n - 1 个数,再进行冒泡排序,直到剩下最后一个;
6,快速排序(交换排序的一种),有未排序的数组,选第一个数出来,然后对数组进行扫描,把小于第一个数的数组成一组,放在第一个数的左边,把大于第一个数的数组成另外一组,放在第一个数的右边,然后递归地对这两组进行同样的操作,知道不能再把数组成组;
7,归并排序,把待排序的数组分成若干组,这些组内部进行排序,然后再把有序的集合合并为整体有序的数组;
8,基数排序,将待排序数组的数统一为同样的数位长度,数位较短的数字前面补零,然后从最低位开始,依次进行排序,直到最后进行最高位的比较排序,排序结束;
各算法复杂度及稳定性:http://blog.chinaunix.net/uid-21457204-id-3060260.html;
以上。
浙公网安备 33010602011771号