hzCPPOJ

双向选择排序

时间限制:  1 s      内存限制:   128 MB
提交:82     正确:52     分值:95

题目描述

选择排序:顾名思义,就是主要通过选择来完成的排序,每一趟从待排数据中选择一个最大或者最小的数据,将其放到序列的起始,直到全部数据排完。

直接选择排序的思路是这样的:
例如我们要排升序,我们就假设第一个数据为最小值,将它的下标存入变量min中,如果后面存在比第一个数据还要小的数据,则将那个数据的下标存入min中,然后遍历一次数据,经过不停的更新下标,此时会有两个情况,如果min和起始位置相同,则说明起始点就是最小值,数组不需要变化,而如果不相同,则说明最小值下标更新,我们需要将更新后下标所在的数据和起始下标的数据进行交换,保证最小值归位。


直接选择排序的思路就是每趟将一个最小值归位,但是我们不妨想想,如果在一趟中我们既将最小值归位,也将最大值归位,效率是不是更高?这也就是双向选择排序的思路,每趟同时保存最大和最小下标,设首位为最小,末尾为最大,从两头往中间不断对比交换,一趟就能够将两个数据归位。


现给定n个数据,进行双向选择排序,并输出排序的全过程


输入

第一行输入一个正整数n

第二行为n个用空格隔开的正整数。

输出

分行输出双向选择排序的全过程。具体要求见样例

样例

样例输入:
6 6 5 8 1 4 7
样例输出:
1:1 5 7 6 4 8 2:1 4 5 6 7 8 3:1 4 5 6 7 8
样例输入:
3 8 4 2
样例输出:
1:2 4 8
样例输入:
10 46 74 53 14 26 36 86 65 27 34
样例输出:
1:14 74 53 46 26 36 34 65 27 86 2:14 26 53 46 27 36 34 65 74 86 3:14 26 27 46 53 36 34 65 74 86 4:14 26 27 34 46 36 53 65 74 86 5:14 26 27 34 36 46 53 65 74 86

提交人

AmberXie

来源/分类