给一个4行5列的2维数组编码实现从小到大排序!
要求:时间复杂度最小!

解决方案 »

  1.   

    import java.util.Arrays;
    public class T {
    public static void main(String[] args) {
    int[][] a = { { 9, 5, 8, 6 }, { 7, 5, 8, 1 }, { 3, 9, 2, 5 },
    { 4, 6, 9, 2 } };
    int[] str = new int[4];
    for (int j = 0; j < 4; j++) {
    for (int i = 0; i < 4; i++) {
    str[i] = a[j][i];
    }
    Arrays.sort(str);
    for (int i = 0; i < 4; i++) {
    a[j][i] = str[i];
    }
    }
    for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
    System.out.print(a[i][j] + ",   ");
    }
    System.out.print("\n");
    }
    }
    }
      

  2.   

    我写的代码,4行4列的,算法复杂度是nlogn,应该不是最优的,期待高手。
      

  3.   

    先合并成 1 维数组,sort 完之后整成二维数组就行了。
      

  4.   


    理论上nlog(n)是最优的了啊。
      

  5.   

    import java.util.Arrays;public class T {
    public static void main(String[] args) {
    int[][] a = { { 39, 25, 98, 16,11 }, { 77, 55, 86, 11,31 }, { 33, 29, 23, 50 ,41}, { 14, 16, 19, 12 ,51} };
    int[] str = new int[20];
    int n = 0;
    for (int j = 0; j < 4; j++) {
    for (int i = 0; i < 5; i++) {
    str[n++] = a[j][i];
    }
    }

    Arrays.sort(str);

    n = 0;
    for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 5; j++) {
    System.out.print(str[n++] + ",  ");
    }
    System.out.print("\n");
    }
    }
    }
      

  6.   

    sort(int[] array)
    对指定的 int 型数组按数字升序进行排序。该排序算法是一个经过调优的快速排序法,改编自 Jon L. Bentley 和 M. Douglas McIlroy 合著的《Engineering a Sort Function", Software-Practice and Experience》Vol. 23(11) P. 1249-1265 (November 1993)。
    此算法在许多数据集上提供 n*log(n) 性能,这导致其他快速排序会降低二次型性能。
      

  7.   

    public static void main(String[] args) { 
    int[][] a = { 
    { 9, 5, 8, 6 },
    { 7, 5, 8, 1 },
    { 3, 9, 2, 5 }, 
    { 4, 6, 9, 2 }
    }; 
    int str = 0; 
    for (int b =0;b<19;b++){
    for (int j = 0; j < 4; j++) { 
    for (int i = 0; i < 4; i++) {
    if(i==3&&j<3){
    if(a[j][i]>a[j+1][0]){
     str=a[j][i];
     a[j][i]=a[j+1][0];
     a[j+1][0]=str;
    }
    }else if(i<3){
     if(a[j][i]>a[j][i+1]){
     str=a[j][i];
     a[j][i]=a[j][i+1];
     a[j][i+1]=str;
       }
      } }
     }

    for (int i = 0; i < 4; i++) { 
    for (int j = 0; j < 4; j++) { 
    System.out.print(a[i][j] + ",  "); 

    System.out.print("\n"); 

    }
    我贴出来!不敢说是最优的!但至少是一个解决方法!