选择排序:顾名思义,就是主要通过选择来完成的排序,每一趟从待排数据中选择一个最大或者最小的数据,将其放到序列的起始,直到全部数据排完。
直接选择排序的思路是这样的:
例如我们要排升序,我们就假设第一个数据为最小值,将它的下标存入变量min中,如果后面存在比第一个数据还要小的数据,则将那个数据的下标存入min中,然后遍历一次数据,经过不停的更新下标,此时会有两个情况,如果min和起始位置相同,则说明起始点就是最小值,数组不需要变化,而如果不相同,则说明最小值下标更新,我们需要将更新后下标所在的数据和起始下标的数据进行交换,保证最小值归位。
直接选择排序的思路就是每趟将一个最小值归位,但是我们不妨想想,如果在一趟中我们既将最小值归位,也将最大值归位,效率是不是更高?这也就是双向选择排序的思路,每趟同时保存最大和最小下标,设首位为最小,末尾为最大,从两头往中间不断对比交换,一趟就能够将两个数据归位。
现给定n个数据,进行双向选择排序,并输出排序的全过程
第一行输入一个正整数n
第二行为n个用空格隔开的正整数。
分行输出双向选择排序的全过程。具体要求见样例