給定乙個陣列,陣列內每乙個元素的位置和其最終排序好的位置 的 距離相差在 k 以內,怎麼有效的對其排序?要求時間複雜度為 o(n log k)
#includeusing namespace std;
void swap(int *x, int *y);
//小頂堆類
class minheap
// i的右孩子的下標
int right(int i)
//取走最小值(或者說是 root), 並新增新的元素x
int replacemin(int x);
// 取最小值
int extractmin();
};// k為每個元素的當前位置和排序陣列位置相差的範圍
int sortk(int arr, int n, int k)
return 0;
}// 以下是標準的小頂堆的實現
minheap::minheap(int a, int size)
}//從小頂堆中移除堆頂元素
int minheap::extractmin()
return root;
}// 替換root和給定的x
int minheap::replacemin(int x)
// 調整小頂堆(遞迴的方法)
void minheap::minheapify(int i)
}// 交換
void swap(int *x, int *y)
//列印陣列
void printarray(int arr, int size)
// 測試
int main()
; int n = sizeof(arr) / sizeof(arr[0]);
sortk(arr, n, k);
cout << "following is sorted array\n";
printarray(arr, n);
return 0;
}
幾乎有序陣列排序
題目 已知乙個 幾乎有序 的陣列,幾乎有序是指,如果把陣列排好順序的話,每個元素移動的距離可以不超過k 並且k相對於陣列來說比較小。請選擇乙個合適的排序演算法針對這個資料進行排序。給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列。思路 對於該題目,插入排序能夠做到很好效果,時...
基本有序陣列的排序 legend
1 背景 已知乙個幾乎有序的陣列,幾乎有序是指,如果把陣列排好順序的話,每個元素移動的距離可以不超過k,並且k相對於陣列來說比較小。請選擇乙個合適的排序演算法針對這個資料進行排序。給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列。2 分析 2.1 思路一 插入排序 插入排序能...
找出有序陣列中最接近給定目標數的下標 遞迴實現
輸入 1,2,3,3,4,5,6,7,8 3 輸出 2 輸入 1,3,5,7,9 4 輸出 1 實現方式 二分 遞迴 主要思想 設定兩個游標,start,end,取start和end的中位數,及其左邊一位,和右邊一位,將三者與目標值的絕對差值進行比較。設中位數與目標的絕對差值為sm,左邊一位的絕對差...