如何對n個整數數進行排序,要求時間復雜度O(n),空間復雜度O(1)


題目:如何對n個不重復出現的整數序列進行排序,已知這些數的范圍為(0-65535),要求時間復雜度O(n),空間復雜度O(1)

分析:

可以申請一個大小為65536的數組A,數組的x下標代表數字x,A[x]代表x 在整數序列中出現的次數。掃描一遍整數序列就可以完成對該整數序列的排序,時間復雜度為O(n)

應為已知范圍,申請大小為65536的數組,大小為常量,所以空間復雜度為O(1)

代碼:

 

  1: #include<cstring>

  2: #define SIZE 65536

  3: void rangeSort(int *array,int len)

  4: {

  5:     int data[SIZE] ;

  6:     int i = 0 ;

  7:     int j = 0 ;

  8:     memset(data,0,SIZE*sizeof(int)) ;

  9:     for(i=0;i<len;++i){

 10:         data[array[i]] ++ ;

 11:     }

 12:     i = 0 ;

 13:     for(j=0;j<SIZE;++j){

 14:         if (!data[j]){

 15:             array[++i] = j ;                 

 16:         }    

 17:     }

 18: }


免責聲明!

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



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