二维数组排序问题
现有一个二维数据a[10,10],10行10列。 首先把每行的元素从小到大排序一下,接着把每列的元素从小到大排序一下。请问每行的元素还是从小到大排序的吗?如果是或者不是,请证明!
例子(这里由于版面原因,只列出3*3的数组)
4 2 5 2 4 5 2 4 5
9 8 10 ->排序行 8 9 10 ->排序列 3 4 5 -> 可以发现每行还是按照从小到大排序的。
3 4 5 3 4 5 8 9 10
[解决办法]
变换之后的矩阵每行中的元素还是从小到大排列的。证明如下:
用反证法,假设存在一处a[i, j] > a[i, j+1]。
因为列中元素是经过排序的,所以必定有:
a[1, j+1] <= a[2, j+1] <= …… <= a[i, j+1] < a[i, j]
也就是说,第j+1列中存在着 i 个比a[i, j]还要小的元素。
这就是说,在行排序之后列排序之前,在原来的第 j 列中一定还有至少 i 个比a[i, j]还要小的数字(其实就是与a[1, j+1] ,a[2, j+1] , …… a[i, j+1]同行的这 i 个 ,它们比a[1, j+1] ,a[2, j+1] , …… a[i, j+1]还要小,当然更比a[i, j]小)。
这说明,如果对第 j 列排序的话,a[i, j]这个元素排不到第 i 行(因为同列中至少有i个元素是比它还要小的),这与[i, j]的下标明显是矛盾的。
从而假设不成立。
不知道说清楚了没,反正我看着是挺明白的:)