用乙個測試類簡化排序演算法時間複雜度的研究

2021-10-06 21:14:45 字數 3313 閱讀 6830

目錄

三、測試類

四、寫在最後

一、背景

無彈窗**網 www.amini.net

在學習演算法的過程中,除了熟練掌握各種演算法的程式邏輯外,還經常需要用到一些測試案例對演算法的時間複雜度做具體的測試。本文將通過打造乙個測試類工具包,讓我們可以更簡便地研究排序演算法的時間複雜度。

二、概念

2.1、時間複雜度的定義

即從序列的初始狀態到經過排序演算法後形成的最終排序狀態這個過程所花費的時間度量

2.2、時間複雜度的比較

排序演算法

時間複雜度(平均)

時間複雜度(最好)

時間複雜度(最壞)

氣泡排序

o(n2)

o(n)

o(n2)

選擇排序

o(n2)

o(n2)

o(n2)

插入排序

o(n2)

o(n)

o(n2)

希爾排序

o(n logn)

o(n log2n)

o(n log2n)

歸併排序

o(n logn)

o(n logn)

o(n logn)

快速排序

o(n logn)

o(n logn)

o(n2)

堆排序o(n logn)

三、測試類

3.1、程式結構

3.2、測試工具類

/**

* 整數排序測試工具類

* * @author zhuhuix

* @date 2020-06-06

*/public class sortutils

return arr;

} else

}/**

* 生成乙個從0開始的近乎順序的整型陣列

** @param count 陣列的數量

* @param swapcount 數字範圍起始值

* @return 近乎順序的整型陣列

*/public static int generatenearlyorderedarray(int count, int swapcount)

random random = new random();

for (int i = 0; i < swapcount; i++)

return arr;

}/**

* 對整型陣列做完全拷貝

** @param source 源陣列

* @return 陣列拷貝

*/public static int copyarray(int source)

return dest;

} else

}/**

* 判斷整型陣列是否已經公升序排列

** @param arr 整型陣列

* @return 已經公升序排列為true否則為false

*/public static boolean issorted(int arr)

}return true;

}/**

* 遍歷列印陣列

* @param arr 整型陣列

*/public static void printarray(int arr) else

}}else

}/**

* 通過排序介面,呼叫各種排序演算法進行測試

* @param sortname 排序演算法名稱

* @param sort 排序統一介面

* @param arr 整型陣列

*/public static void testsort(final string sortname,sort sort,int arr)

}

3.3、 排序演算法介面定義
/**

* 整型陣列排序統一介面定義

* * @author zhuhuix

* @date 2020-06-06

*/public inte***ce sort

3.4、 各種排序演算法的實現

插入排序

/**

* 插入排序

* * @author zhuhuix

* @date 2020-06-06

*/public class insertsort implements sort

arr[j] = temp;}}

}

快速排序

/**

* 快速排序

* * @author zhuhuix

* @date 2020-06-06

*/public class quicksort implements sort

private void quick(int arr, int left, int right)

}private int partition(int arr, int left, int right)

}swap(arr, pivot, index - 1);

return index - 1;

}private void swap(int arr, int x, int y)

}

其他排序

public class otherssort implements sort }}

3.5、 測試主程式
/**

* 整數排序測試類

* * @author zhuhuix

* @date 2020-06-06

*/public class sorttest

}

3.6、 測試分析

四、寫在最後

在日常學習上,邏輯思維非常重要,特別是在資料結構和演算法的學習過程中,建立邏輯+套路的結構思維化,具備結構化思維,才能將問題分析地更全面、更深刻。

乙個時間效率為O n 的排序演算法

題目 請實現乙個排序演算法,要求時間效率為o n 允許使用常量大小的輔助空間不得超過o n 首先回顧一下自己實現了的幾種常用的排序演算法 一 插入排序 1 include2 using namespace std 3void insert sort int a,int size 414 a i 1 ...

設計乙個類,用get,set

建立乙個people類,裡面包含 名字 年齡 兩個成員變數,以及這兩個成員的get,set方法 要求用標頭檔案 實現檔案的標準格式實現,然後可以在main函式裡直接建立people物件 第一步 建立控制台程式 include stdafx.h include people.h include inc...

設計乙個日期類和時間類

define cry secure no warings 問題描述 設計乙個日期類和時間類,編寫display函式用於顯示日期和時間。要求 display函式作為類外的普通函式,分別在time和date類中將display宣告為友元函式。在主函式中呼叫display函式,display函式分別引用t...