無序數組排序(時間復雜度為O(n))


好吧,這個是剛從別人那里看到的https://www.cnblogs.com/kubidemanong/p/10409712.html,學到了,先記下來。

問題:給你n個無序的int整型數組arr,並且這些整數的取值范圍都在0-20之間,要你在 O(n) 的時間復雜度中把這 n 個數按照從小到大的順序打印出來。

對於數組來說,如果你是先把這 n 個數先排序,再打印,是不可能O(n)的時間打印出來的。但是數值范圍在 0-20。我們就可以巧用數組下標了。把對應的數值作為數組下標,如果這個數出現過,則對應的數組加1

代碼如下:

public void f(int arr[]) {
  int[] temp = new int[21];
  for (int i = 0; i < arr.length; i++) {
     temp[arr[i]]++;
  }
  //順序打印
  for (int i = 0; i < 21; i++) {
     for (int j = 0; j < temp[i]; j++) {
       System.out.println(i);
     }
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM