我在面试中被问了一个问题,就是在O(n)时间内对双维数组进行排序。如何在O(n)中进行。可以有人对它进行一些说明..谢谢。
输入:
3 5 7 1
4 9 2 0
9 3 6 2
输出
0 1 2 2
3 3 4 5
6 7 9 9
答案 0 :(得分:1)
不知道双维数组实际上是什么意思,但是有一些排序算法特定于可以实现O(n)的某些情况。一个例子是Counting sort,如果要对1000到1000范围内的1000个整数进行排序,它可以在O(n)中排序。
编辑:事实上,它是一个多维数组,不会改变排序逻辑。您可以将索引(使用排序)转换为二维索引,如下所示:
array[i / N][i % N];
其中N是第一维的大小。
答案 1 :(得分:0)
您可以排序为普通数组。
E.g。
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b){
return *(int*)a - *(int*)b;
}
#define ROW_SIZE 3
#define COL_SIZE 4
int main(void){
int M[ROW_SIZE][COL_SIZE]={{3,5,7,1},{4,9,2,0},{9,3,6,2}};
int c,r,*p;
for(p=&M[0][0],r=0;r<ROW_SIZE;++r){
for(c=0;c<COL_SIZE;++c){
printf("%d ",*p++);
}
printf("\n");
}
printf("\n");
qsort(&M[0][0], ROW_SIZE*COL_SIZE, sizeof(int), cmp);
for(p=&M[0][0],r=0;r<ROW_SIZE;++r){
for(c=0;c<COL_SIZE;++c){
printf("%d ",*p++);
}
printf("\n");
}
return 0;
}