對接近有序的陣列排序

2021-06-22 15:56:01 字數 1020 閱讀 5220

給定乙個陣列,陣列內每乙個元素的位置和其最終排序好的位置 的 距離相差在 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,左邊一位的絕對差...