幾乎有序陣列排序

2021-08-03 11:00:19 字數 744 閱讀 1941

題目:

已知乙個

幾乎有序

的陣列,幾乎有序是指,如果把陣列排好順序的話,

每個元素移動的距離可以不超過k

,並且k相對於陣列來說比較小。請選擇乙個合適的排序演算法針對這個資料進行排序。

給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列。

思路:

對於該題目,插入排序能夠做到很好效果,時間複雜度o(nk),空間複雜度o(1)

其次就是選擇堆起始大小為k的最小堆排序演算法,由題意可知a[0~k-1]一定存在整個陣列中最小的值,將a[0~k-1]匯出最小堆,堆頂放到a0處,a[k]放到最小堆的堆頂,繼續建堆,知道剩下最後k個元素,此時隨著每次堆頂的彈出,堆的大小k--.

時間複雜度o(nlogk),空間複雜度o(k).理論上說也可以實現原地排序的。

public class main ;

main m=new main();

int a = m.sortelement(b,15,3);

for(int i=0;i0;k--)

return b;

}public void buildminheap(int a,int heapsize)

}public void minheapify(int a,int heapsize,int i){

int min=i;

int left=2*i+1;

int right=2*i+2;

if(left

基本有序陣列的排序 legend

1 背景 已知乙個幾乎有序的陣列,幾乎有序是指,如果把陣列排好順序的話,每個元素移動的距離可以不超過k,並且k相對於陣列來說比較小。請選擇乙個合適的排序演算法針對這個資料進行排序。給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列。2 分析 2.1 思路一 插入排序 插入排序能...

有序陣列歸併

寫下這段文字純粹因為太生疏了。下午花了很多時間寫有序陣列的歸併陷入死胡同,結果是證明了兩個陣列歸併沒有輔助陣列時不幸的。通常的陣列歸併,對於大小為m和n的陣列,需要m n的輔助陣列,寫起來並不複雜。有次面試的時候要求寫乙個只有n輔助大小的做法。將b陣列拷到a陣列中,然後在a,b中選小的逐個放入a中。...

Java有序陣列

1 有序陣列簡介,以及優缺點 2 構建有序陣列 在陣列增刪改查功能裡,我們是如何讓陣列有序的呢?肯定是新增方法 1 我們在新增的時候可以進行乙個判斷 2 判斷我們這個新新增的資料到底是新增在哪個地方在哪個位置 接下來插入資料 public void insert int values 然後跳出這個迴...