宣告:引用請註明出處
排序是乙個非常經典的演算法設計問題,這個不是難點,難點在於設定的in-place操作,意思是所有的操作都是」就地「操作,不允許進行移動。在我的博文《排序演算法一:直接插入排序》中講到了對於排序演算法,時間複雜度在於專案間的比較和移動次數,這裡的in-place操作指的就是設定移動次數為0。分析排序演算法中為何需要專案間的移動,主要是為了節省記憶體消耗(空間複雜度),在原有的陣列記憶體空間上進行排序,這樣就需要為已經排好序的資料倒騰記憶體,通常的解決辦法是將要倒騰的記憶體位置上的未排序的資料存在乙個臨時變數(temp)進行儲存,然後其它的資料依次移動。這樣的演算法額外的空間消耗只有o(1)。題目中的要求是這個臨時變數也不能用。實際上是要解決in-place的資料交換操作。
/// /// 交換元素
///
/// 元素1
/// 元素2
private static void swap(ref int x, ref int y)
/// /// 插入排序(加強版)
///
/// 待排序陣列
/// 陣列元素個數
///
public static int insertionsortup(int array, int n)
}return array;
}
資料結構 時間複雜度 空間複雜度
1.演算法效率 演算法效率可以用來衡量乙個演算法的好壞 演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小...
演算法的複雜度 時間複雜度與空間複雜度
通常,對於乙個給定的演算法,我們要做 兩項分析。第一是從數學上證明演算法的正確性,這一步主要用到形式化證明的方法及相關推理模式,如迴圈不變式 數學歸納法等。而在證明演算法是正確的基礎上,第二步就是分析演算法的時間複雜度。演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很...
演算法的時間複雜度 空間複雜度
時間複雜度和空間複雜度是度量演算法效率的常用指標 事後統計,不常用 事前統計影響因素 演算法策略 問題規模 程式語言 質量 機器執行指令的速度 撇開軟硬體的影響,演算法執行工作量的大小只依賴於問題的規模 通常用整數n表示 乙個演算法是由控制結構 順序,分支,迴圈三種 和原操作 指固有資料型別的操作 ...