内部排序分为
1)通过插入进行排序
1、简单插入排序——sampleInsertionSort
把序列分为已排序未排序,每次重未排序中选择最前头的的元素,使用简单的从后往前的一个一个的比较来选择插入位置,然后重新排列元素位置(在这里我采用右旋转)。
2、二叉插入排序——binaryInsertionSort
把序列分为已排序未排序,每次重未排序中选择最前头的的元素,使用二叉查找来选择插入位置,然后重新排列元素位置(在这里我采用右旋转)。
3、希尔排序——shellSort
1)gap有序:确保gap有序时使用的是上面的法方法一(gap有序:即相隔gap的所有元素之间是有序的1、5、4、9、7、11是gap2有序的)
2)gap的递减:gap一般是一个序列,其第一个元素为1;
note:至于shellSort为什么能比较快,可以看看程序设计艺术中的第三篇,我也就只有个印象,写不出来。
2)通过交换进行排序:
1、冒泡排序——bubbleSort:
相邻元素逆序则交换。
2、快速排序——quicksort
1)partion部分:选择一个元素,经过处理后使得其左边位置的元素小于等于它,其右边位置的元素大于等于他
2)sort部分:不断的partion直到序列只有一个或零个元素
note:快速排序为什么快同上
3)通过选择进行排序:
1、简单选择——sampleSelectionSort
将元素分为有序和无序,每次重无序序列中选择最大的元素让其和无序序列中后位置的元素交换这样一步一步扩张有序序列,缩减无序序列,直到无序序列中只有一个元素。
2、堆排序——heapSort
1)建最大堆;
2)交换堆头元素与堆尾元素,使堆大小减1;
3)向下调整使得其保持堆的性质;
4)重复这个过程,直到堆中只有一个元素。
4)通过合并进行排序
note:没写以后补上
5)通过分布进行排序
note:没写以后补上
第一次更新 2012 09 06
原码见https://github.com/erliang/basic-sort-algorithm