修改冒泡排序

时间:2014-03-24 02:43:18

标签: java runtime bubble-sort

我需要编写一个算法来获取一个int数组并找到数组中第k个最大的元素。需要注意的是运行时必须是O(K * n)或更好。

我的老师明确表示这可以通过修改后的冒泡程序来完成,但我不确定如何在不破坏它的情况下修改冒泡排序,因为我认为有必要循环遍历每个元素。阵列。这是我的代码(只是程序的shell和未修改的冒泡排序):

public int kthLargest(int[] A, int k){

    int[] sorted = A;
    int temp;
    for (int i = (A.length - 1); i >= 0; i--)
       {
          for (int j = 1; j <= i; j++)
          {
             if (sorted[j-1] < sorted[j])
             {
                  temp = sorted[j-1];
                  sorted[j-1] = sorted[j];
                  sorted[j] = temp;
             }
          }
       }
    return sorted[k-1];
}

想出来:

public int kthLargest(int[] A, int k){

    int[] sorted = A;
    int temp;
    for (int i = 0; i < A.length-1; i++)
       {
          for (int j = 0; j < A.length-i-1; j++)
          {
             if (sorted[j] > sorted[j+1])
             {
                  temp = sorted[j];
                  sorted[j] = sorted[j+1];
                  sorted[j+1] = temp;
             }
             if(i == (k-1)) return A[A.length-i-1];
          }
       }
    return sorted[A.length-k];

}

数组已经被排序到第k个最大的元素,它已经找到它正在寻找的东西并且可以停止排序并返回。

1 个答案:

答案 0 :(得分:0)

如果列表已经排序,我认为修改后的冒泡排序会提前退出吗?

这样的东西不会这样吗?

public int kthLargest(int[] A, int k){
    int[] sorted = A;
    int temp;
    bool bSorted = TRUE;
    for (int i = (A.length - 1); i >= 0; i--)
    {
      for (int j = 1; j <= i; j++)
      {
         if (sorted[j-1] < sorted[j])
         {
              temp = sorted[j-1];
              sorted[j-1] = sorted[j];
              sorted[j] = temp;
              bSorted = FALSE;
         }
      }
      if(bSorted)
          break;
   }
   return sorted[k-1];
}