在電腦科學中,乙個原地演算法(in-place algorithm)基本上不需要額外輔助的資料結構,然而,允許少量額外的輔助變數來轉換資料的演算法。當演算法執行時,輸入的資料通常會被要輸出的部分覆蓋掉。不是原地演算法有時候稱為非原地(not-in-place)或不得其所(out-of-place)。
假設我們有n個元素的陣列,此時需要我們將陣列逆轉。其實正常來說我們第一反應肯定會我在建立乙個空陣列來進行儲存,然後在新陣列中的最小下標指向原陣列的最大下標。這樣我們的新陣列就會產生垃圾
vectorreseverarray(vector&v){
int n = v.size();
int len = n -1;
vectornewv(n);
for(int i=0;i我們不由然想到如何通過陣列本身實現逆轉(即不利於額外空間實現)
vectorreseverarray(vector&v){
int n = v.size();
for(int i = 0;i這種在只在現有的陣列裡面進行操作,不在額外的開闢空間,就是一種原地演算法了。
快速排序通常被描述為乙個原地演算法,但是事實上並不是。大部分的實現需要o(log n)的空間來支援它的分治法(divide-and-conquer)遞迴。
原地排序演算法
1 選擇排序 第一輪迴圈 1 從陣列0 n中選擇出最大,與索引位0的數進行交換。第二輪迴圈 1 從陣列中1 n選擇出最大,與索引位1的數進行交換。2 第n 1輪迴圈 3 從陣列n 1 n中選擇出最大,與索引位n 1的數進行交換。時間複雜度 1 交換操作0 n 1次 最好的情況 已經有序,o 0 最差...
Leetcode 原地演算法 75 顏色分類
給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...
原地歸併與非原地歸併
看演算法時看到原地歸併和非原地歸併,不是很懂兩者的區別,故記錄如下 原地演算法 in place algorithm 基本上不需要額外輔助的資料結構,然而,允許少量額外的輔助變數來轉換資料的演算法。當演算法執行時,輸入的資料通常會被要輸出的部分覆蓋掉。wiki 那麼我們來看下兩種演算法的 非原地cl...