排序总结
总结了多种排序方式的基本原理、实现思路。
插入排序
基本原理:首先将由第一个数据元素组成的序列看成是有序的,然后将剩余的n-1个元素依次插入到前面的已排好序的子序列中去,使得每次插入后的子序列也是有序的。
根据往已经排好序的有序数据表中插入的不同方法,可以将插入排序分为:
- 直接插入排序
- 折半插入排序:利用二分查找法,快速地找到a[j]的插入位置。从而达到减少比较次数的目的。
- 希尔排序:设待排序的对象序列有n个对象。首先取一个整数gap < n作为增量,将全部对象分为gap个子序列,所有距离为gap的对象放在同一个序列中,在每一个子序列中分别施行直接插入排序,然后缩小增量gap。重复上述的子序列划分和排序工作,直到最后取gap为1为止。
选择排序
首先,从n个元素中选出关键字最小的元素。再从剩下的(n-1)个元素中选出关键字最小的元素,依次类推,每次从剩下的元素序列中挑出关键字最小的元素,直至序列中最后只剩下一个元素为止。这样,把每次得到的元素排成一个序列,就得到了按非递减序排列的排序序列。
- 直接选择排序:首先在所有元素中用逐个比较的方法选出最小元素,把它与第一个元素交换;然后在剩下的元素中再次用逐个比较的方法选出最小元素,把它与第二个元素交换;以此类推,直到所有元素都放入了正确的位置。
- 堆排序:应用buildHeap对N个元素创建一个优先级队列,通过调用N次deQueue取出每个项,结果就排好序了。
交换排序
交换排序就是根据序列中两个数据元素的比较结果来确定是否要交换这两个数据元素在序列中的位置。
- 冒泡排序:从头到尾比较相邻的两个元素,将小的换到前面,大的换到后面。经过了从头到尾的一趟比较,就把最大的元素交换到了最后一个位置。这个过程称为一趟起泡。然后再从头开始到倒数第二个元素进行第二趟起泡。经过了第二趟比较,又将第二大的元素放到了倒数第二个位置。依次类推,经过第n-1趟起泡,将倒数第n-1个大的元素放入第2个单元。
- 快速排序:在待排序的序列中选择一个数据元素,以该元素为标准,将所有数据元素分为两组,第一组的元素均小于或等于标准元素,第二组的数据元素均大于标准元素。第一组的元素放在数组的前面部分,第二组的数据元素放在数组的后面部分,标准元素放在中间。这个位置就是标准元素的最终位置。这称为一趟划分。然后对分成的两组数据重复上述过程,直到所有的元素都在适当的位置为止。
归并排序
思想来源于合并两个已排序的有序表:顺序比较两者的相应元素,小者移入另一表中,反复如此,直至其中一表为空为止,将另一表中剩余结点自左至右复制到表C的剩余位置。
如果N=1,已排序;否则,对前一半和后一半分别调用归并排序,归并两个已排序的数组。
3205

被折叠的 条评论
为什么被折叠?



