演算法
排序(n^2)
時間複雜度是o(n^2)的排序有插入,選擇,冒泡。由於演算法思想比較簡單易懂,**也不複雜。我們就簡單講講。
插入排序
乙個元素是有序的,從第二個元素開始,依次將每個元素插入到前面序列的對應位置,最終整個序列有序。
外層n-1趟。
void insertsort(int a, int n)
a[j] = toinsert;
}}
平均情況;
wi :將元素插入到i個有序序列的對應位置,並形成新的有序序列。
那麼平均需要比較 (1 + 2 + 3 + ...+ i) * (1 / i) = (i + 1) / 2 次。
所以總共需要比較 w1 + w2 + w3 + ... + w(n-1) = (n^2 + n -2) / 4次。
所以時間 o(n^2) 空間o(1)。
選擇從n個數中選出最大的,並與最後乙個數交換;再從剩餘的n-1個數中選出最大的,與新的最後乙個數交換;知道只剩乙個數為止,則序列有序。
外層n-1趟。
void selectionsort(int a, int n)
}if(seq != i)
}}
顯然時間 o(n^2) 空間o(1)。
氣泡排序
掃瞄整個序列,如果前乙個數比後乙個數大,則交換。
具體做法,從第乙個數開始掃瞄,如果a[1] > a[2],則交換否則繼續。接著a[2] > a[3],則交換。依次類推掃瞄整個序列。
一趟下來最大的數被交換到最後乙個位置。
再從第乙個數開始掃瞄,類似的,只不過掃瞄n-1個數。因為最大數已經在最終有序的位置。
依次類推,一直進行n-1次。則整個序列有序。
void bubblesort(int a, int n)
}///如果再某趟排序中,沒有發生元素交換,則序列已有序。
if(!flag) break;
}}
注意,這加了乙個flag。來判斷一趟掃瞄過程中是否有元素交換,如果沒元素交換,則說明序列已經有序,那麼不用進行之後的掃瞄了。
顯然時間 o(n^2) 空間o(1)。
排序演算法 冒泡 插入 選擇排序
分析排序演算法從下列3個方面進行 排序演算法執行效率 時間複雜度 1 最好情況下時間複雜度 2 最壞情況下時間複雜度 3 平均情況時間複雜度 排序演算法記憶體消耗 空間複雜度,其中原地排序特指空間複雜度為o 1 的排序演算法 排序演算法穩定性 1 穩定的排序演算法 待排序的序列中存在值相等的元素,經...
排序演算法 冒泡,插入,選擇排序
演算法原理 從小到大排序為例 將陣列分成兩部分,左邊部分為已排序部分,右邊部分為未排序部分 從未排序部分的右側開始比較遍歷,相鄰兩個元素比較,保證小元素在前,即如果num j num j 1 就做元素交換,否則不交換 交換到左右兩部分的邊界處,右邊第乙個元素即為右邊部分最小元素,左邊最後乙個元素即為...
冒泡,插入,選擇排序
經典的排序演算法,此文章介紹三個 氣泡排序 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。public void bubblesort int a while iswrap for int ...