選擇排序基本思想及複雜度分析
* 基本思想:兩個for迴圈巢狀,內部for迴圈用來找到最大(小)的元素,外部迴圈用來放置找到的元素
* 複雜度:需要遍歷陣列才能找到峰值元素,所以複雜度與原始序列是否有序無關,最好最壞和平均情況的時間複雜度都為O(n^2);
* 需要一個臨時變數用來交換陣列內資料位置,所以空間複雜度為O(1)
*/
public static void xuanZeSort(int []a)
{
for(int i=0;i<a.length-1;i++)
{
for(int j=i+1;j<a.length;j++)
{
if(a[i]>a[j])
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(int j:a) //j是a遍歷出的每個元素,不是下標
{
System.out.print (j+" ");
}
}
Ps:博文為博主的學習筆記,演算法只是按照自己的理解簡單分析,初學者建議看詳細的圖文講解,如果有錯誤,歡迎交流指正
相關推薦
選擇排序基本思想及複雜度分析
/*選擇排序 (不穩定演算法) * 基本思想:兩個for迴圈巢狀,內部for迴圈用來找到最大(小)的元素,外部迴圈用來放置找到的元素 * 複雜度:需要遍歷陣列才能找到峰值元素,所以複雜度與原始序列是否有序無關,最好最壞和平均情況的時間複雜度都為O(n^2); * 需要一
插入排序,希爾排序原理,程式碼及複雜度分析
插入排序演算法 演算法原理: * 插入排序原理很簡單,講一組資料分成兩組, * 我分別將其稱為有序組與待插入組。 * 每次從待插入組中取出一個元素,與有序組的元素進行比較,並找到合適的位置, * 將該元素插到有序組當中。就這樣,每次插入一個元素,有序組增加,待插入組減少。 * 直到待插入組元素個數
簡單排序演算法時間空間複雜度分析及應用(7)-希爾排序
希爾排序,屬於插入排序的一種,是直接插入排序的加強版。在希爾排序中引入了步長(gap)的概念,然而在插入排序中,步長預設為1。正如我們直接堆插入排序的分析,資料集合的排列順序對插入排序的效率會由很大的
選擇排序的時間復雜度分析
family span lec 時間復雜度 一個 位置 最小 ack 破壞 每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最前(最後),直到所有待排序的數據元素排完。選擇排序是不穩定的排序方法。 選擇排序是給每一個位置選擇當前元素
選擇排序簡單實現和複雜度估計
選擇排序 1.每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在 序列的起始位置,直到全部待排序的資料元素排完。 簡單實現 public class SelectionSort { /** * * @param arr 傳入需要排序的陣列
斐波那契數列的遞迴與迴圈實現及複雜度分析
一、斐波那契數列的定義: 二 、遞迴實現: 經典例題(杭電2041): AC程式碼: #include <iostream> using namespace std; int f[41]; int main() { int num,m;
堆排序及其時間空間複雜度分析
/* * 堆排序 * 一個建立堆的函式,一個排序的函式 * heap初始建堆(大根堆),取得左右孩子中最大的結點,用其和根節點交換, * 然後以此孩子結點繼續建堆 * heapSort 堆排序,先從非葉節點到跟進行迴圈
快速排序實現以及時間複雜度分析
平均時間複雜度分析: T(1) = 1; T(n) = 2*T(n/2) + a*n;(a為常數,每次合併時,複雜度為O(n)) = 2*(2*T(n/4)+a*n/2) + a*n = 4*T(n/4) + 2*a*n = 4*(2*T(n/8)+a*n/4) + 2*a*n = 8*T(n/8) + 3
常見排序演算法的基本原理、程式碼實現和時間複雜度分析
排序演算法無論是在實際應用還是在工作面試中,都扮演著十分重要的角色。最近剛好在學習演算法導論,所以在這裡對常見的一些排序演算法的基本原理、程式碼實現和時間複雜度分析做一些總結 ,也算是對自己知識的鞏固。 說明: 1.本文所有的結果均按照非降序排列; 2.本文所有的程式均用c++實現,
堆排序的JAVA實現及時間複雜度分析
堆排序是一個比較常用的排序方式,下面是其JAVA的實現: 1. 建堆 // 對輸入的陣列進行建堆的操作 private static void buildMaxHeap(int[] array, int length) { // 遍歷所有
八大排序演算法及時間空間複雜度分析,java版
//放在一起感覺又臭又長,所以每排序我單獨放出來了,歡迎大家平均交流指出不足import java.lang.reflect.Array;import java.util.*;public class EightKindOfSort {/*選擇排序 (不穩定演算法) *
淺談直接插入排序演算法思想以及時間複雜度分析
研究意義 直接插入排序是最基本的一種排序演算法,其思想簡單,容易掌握,對後期的學習也有一定的幫助。 必備知識(之後不再敘述) 排序:將一組雜亂無章的資料排列成一個按關鍵字有序的序列。 穩定性:關鍵值相
九大排序演算法的手寫實現及時空複雜度分析
一、氣泡排序 氣泡排序是一種簡單的排序方法,演算法如下: 1. 首先將所有待排序的數字放入工作列表中。 2. 從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。 3. 重複2號步驟(倒數的數字加1。例
九大排序演算法的手寫實現及時空複雜度分析 筆試面試必備
一、氣泡排序 氣泡排序是一種簡單的排序方法,演算法如下: 1. 首先將所有待排序的數字放入工作列表中。 2. 從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。 3. 重複2號步驟(倒數的數字加1。例如
快速排序演算法及時間複雜度分析(原地in-place分割槽版本)
快速排序演算法一般來說是採用遞迴來實現,其最關鍵的函式是partition分割函式,其功能是將陣列劃分為兩部分,一部分小於選定的pivot,另一部分大於選定的pivot。我們將重點放在該函式上面。 partition函式總體思路是自從一邊查詢,找到小於pivot的元素,則將
快速排序及時間複雜度分析
它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料
堆排序演算法及時間複雜度分析
堆其實通常是通過一維陣列來實現的,在陣列起始下標為0的情況下,父節點i的左右子節點分別為2*i+1和2*i+2,子節點i的父節點為(i-1)/2。對堆的操作主要有建堆、調整堆、堆排序、插入和刪除堆中元素。其中調整堆是核心。下面將重點介紹兩種調整堆的方法。 向下調整堆(shi
經典內部排序演算法學習總結(演算法思想、視覺化、Java程式碼實現、改進、複雜度分析、穩定性分析)
一、什麼是排序演算法? 排序,顧名思義,就是按照一定的規則排列事物,使之彼此間有序 而排序演算法所要做的工作,就是將資料按照人為制定的比較規則排列好,使資料處於彼此間有序的狀態。 二、為什麼要進行排序? 那為什麼要將資料排序呢?計算機處理速度這麼
Java實現經典排序演算法及複雜度穩定性分析
/* 氣泡排序 */ public static int[] bubbleSort(int[] arry) { for (int i = 0; i < arry.length; i++) {
快速排序、程式碼實現(python3版)及其時間空間複雜度分析
快速排序是對氣泡排序的一種改進。基本思想是:通過一躺排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按次方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。最壞情況的時間複雜度為O(n2),最好情況時間複雜度