無序陣列 的特殊排序

2021-07-10 03:20:41 字數 695 閱讀 7150

分析:

對於一般陣列的排序顯然 o(n) 是無法完成的。

既然題目這樣要求,肯定原先的陣列有一定的規律,讓人們去尋找一種機會。

例如:原始陣列:

a = [ 10, 6,9, 5,2, 8,4,7,1,3 ]

如果把它們從小到大排序且應該是

b = [1,2,3,4,5,6,7,8,9,10 ]  

也就是說: 如果我們觀察 a --> b 的對映關係是:

a[ i ] 在 b 中的位置是 b[ a[i] - 1]

答案一:

#include

int main()

;int len=sizeof(a)/sizeof(int);

int temp;

for(int i=0;i此題值得注意的就是:在for迴圈裡for(i=0;i方法二:對上述方法進行了優化,不是每次都需要交換的。

#include 

int main(int argc,char *argv) ;

int len = sizeof(a)/sizeof(int);

printf("%d\n",len);

int tmp;

int i;

for(i = 0; i < len; i++)

} for(i = 0; i < len; i++)

return 0;

陣列擴容 無序陣列

靜態空間管理 開闢內部陣列並適用一段位址連續的物理空間,capacity為總容量,size為當前的實際規模。若採用靜態空間策略管理,容量capacity固定,則存在明顯的不足。上溢 capacity空間不夠,不足以存放所有元素 下溢 capcity空間過大,存放的元素寥寥無幾,裝填因子 load f...

無序陣列的歸併排序與合併多個有序陣列

1.什麼是歸併排序?歸併排序先把大的陣列的合併問題拆分成多個小的區間,然後兩兩進行合併。核心思想是遞迴 歸併 遞迴 把大區間拆分成無數個小區間 歸併 把兩個小區間合併成乙個大區間 解題思路 遞迴 兩個有序列表的合併 1.案例1 對無序的陣列進行歸併排序 如下 public static void m...

無序陣列排序後的最大相鄰差

無序陣列排序後的最大相鄰差 public class maxdis int d max min 1.如果 max和min相等則說明陣列中所有元素都相等則,返回0 if d 0 2.初始化桶 int bucketnum array.length bucket buckets newbucket buc...