#884. 算法基础-选择、冒泡与归并排序

算法基础-选择、冒泡与归并排序

选择排序:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在待排序的数列的最前,直到全部待排序的数据元素排完。

冒泡排序:以n个人站队为例,从第1个开始,依次比较相邻的两个是否逆序对(高在前,矮在后),若逆序就交换这两人,即第1个和第2个比,若逆序就交换两人,接着第2个和第3个比,若逆序就交换两人,接着第3个和第4个比,若逆序就交换两人,……,直到n-1和n比较,经过一轮比较后,则把最高的人排到最后,即将最高的人像冒泡一样逐步冒到相应的位置。原n个人的排序问题,转换为n-1个人的排序问题。第二轮从第1个开始,依次比较相邻的两个人是否逆序对,若逆序就交换两人,直到n-2和n-1比较。如此,进行n-1轮后,队列为有序的队列。

归并排序:是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。归并排序的思想是先递归分解数据,再合并数据。

1、要对包含5个元素的序列{3,1,2,5、4}重新排序,每次可以对任意两个元素进行交换,问最少需要交换多少次,使序列实现升序排列{1、2、3、4、5}({{ input(1) }})

2、将 9,32, 5,16,88,2,66,99按从小到大排序,每次可以交换任意两个元素,最少需要交换{{ input(2) }}次完成排序。

3、三个小朋友站成一列纵队,现在要把他们的顺序倒过来,最前的换到最后,最后的换到最前,每次只能相邻的两个小朋友交换位置,问最少要交换({{ input(3) }})次?

4、将有5个数的序列排序,不管原来的顺序如何,要完成从小到大排序,最少要经过({{ input(4) }})次比较?

5、下列排序算法中,平均情况下效率最高的是({{ select(5) }})。

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 快速排序