小範圍排序練習題

2021-07-27 04:22:57 字數 901 閱讀 1587

已知乙個幾乎有序的陣列,幾乎有序是指,如果把陣列排好順序的話,每個元素移動的距離可以不超過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,可以考慮使用堆排序,...