已知乙個幾乎有序的陣列,幾乎有序是指,如果把陣列排好順序的話,每個元素移動的距離可以不超過k,並且k相對於陣列來說比較小。請選擇乙個合適的排序演算法針對這個資料進行排序。
給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列
解題思路:因為該資料是差不多有序,肯定用插入排序複雜度了o(n*k) ,但是大多數人用堆排序複雜度為o(nlogn)
、
public
int sortelement(int a, int n, int k)
int heap = getkheap(a, k);
for (int i = k; i < n; i++)
for (int i = n - k; i < n; i++)
return a;
}public
int getkheap(int a, int k)
return heap;
}public
void heapinsert(int heap, int value, int
index) else }}
public
void heapify(int arr, int
index, int heapsize)
if (right < heapsize && arr[right] < arr[smallest])
if (smallest != index) else
index = smallest;
left = index * 2 + 1;
right = index * 2 + 2;}}
public
void swap(int arr, int index1, int index2)
小範圍排序
已知乙個幾乎有序的陣列,幾乎有序是指,如果把陣列排好順序的話,每個元素移動的距離可以不超過k,並且k相對於陣列來說比較小。請選擇乙個合適的排序演算法針對這個資料進行排序。給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列。測試樣例 2,1,4,3,6,5,8,7,10,9 10...
小範圍排序
給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列。時間複雜度 o n 的.桶排序 由於陣列大小和區別無法確定,最好別用 時間複雜度 o nlogn 的 堆排序 已經每個元素最多移動k個距離,那麼最下的那個數移動到陣列第乙個位置距離最多為k,可以建立長度為k的小根堆,並且彈出堆...
刷題之路 小範圍排序練習
已知乙個幾乎有序的陣列,幾乎有序是指,如果把陣列排好順序的話,每個元素移動的距離可以不超過k,並且k相對於陣列來說比較小。請選擇乙個合適的排序演算法針對這個資料進行排序。給定乙個int陣列 a,同時給定a的大小 n和題意中的 k,請返回排序後的陣列。因為每個元素移動距離不超過k,可以考慮使用堆排序,...