題目:
已知乙個
幾乎有序
的陣列,幾乎有序是指,如果把陣列排好順序的話,
每個元素移動的距離可以不超過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 然後跳出這個迴...