1.選擇排序
2.氣泡排序/雙向氣泡排序
3.插入排序
1.選擇排序
選擇排序是一種最為直觀的排序方法。每次迴圈從陣列中選擇出乙個最小或者最大的元素,按順序重新放入陣列中,直到所有的戴排序元素都排序完成。
publicvoid selectsort(int
a) }
}}
從**不難看出,選擇排序的過程是:第一次迴圈,遍歷陣列找出陣列中最小的數字,放入a[0],第二次迴圈,找出剩下陣列中最小的數字放入a[1]一次類推。
所以,選擇排序的時間複雜度為o(n^2),如果n較大,則效率會非常低。
2.氣泡排序
氣泡排序也是較為簡單的一種排序方法,之所以叫氣泡排序,是因為排序的手法會使數字浮到陣列頂端而得名。
publicvoid bubbsort(int
a) }
}}
從**我們可以看出來:氣泡排序是用層迴圈,外側迴圈的意義是在於,迴圈n次,每次冒泡都冒出最小的節點依次放在陣列的最前面。第二層迴圈的意義是在於,進行冒泡操作,每次比較相鄰的兩個元素,將較小的元素,像陣列頭方向移動。
因此我們可以看出氣泡排序的時間複雜度為o(n^2),如果n較大,則效率會非常低,如果陣列是有序的,即進行一次冒泡掃瞄發現移動的關鍵次數為最小時,說明陣列已經有序,此時的時間複雜度為o(n)。
雙向氣泡排序:
傳統的氣泡排序要麼是從左向右進行,要麼從右向左進行,每次都只對陣列一頭的元素進行掃瞄排序。
而雙向氣泡排序首先從前往後把最大數移到最後,然後反過來從後往前把最小的乙個數移動到陣列最前面,這一過程就是第一輪,然後重複這一過程,最終就會把整個陣列從小到大排列好。
publicvoid bubbsort2(int
a) }
left = t+1; //
t+1中間亂序部分的最左端
for(int i=left;i)
}right = t-1;//
t-1為中間亂序部分的最右端
} }
從**看來,雙向氣泡排序會比普通氣泡排序減少很多次迴圈。因為雙向排序時陣列的兩頭都排序好了,我們只需要處理陣列的中間部分即可,普通氣泡排序只有一頭的元素是排好序的。
雖然雙向氣泡排序有些改進,但是不能大幅度的提公升效率,這是由於氣泡排序的基本過程所確定的。
3.插入排序
插入排序的基本方法是,每步將乙個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。
publicvoid insertsort(int
a) }
a[j]=temp; //
插入元素
} }
直接插入排序最好的時間複雜度為o(n),平均時間複雜度為o(n^2)。同樣的,如果n過於大的時候,直接插入排序的效率會很低。
插入排序改進思路和氣泡排序一樣,我們也可以對於直接插入排序進行改進。在直接插入排序中我們每次插入元素的時候,都是挨個遍歷前面所有元素,這樣遍歷的效率並不高。
因為插入的陣列是已經排好序的有序陣列,所以我們自然而然的想到了折半插入的方法,這樣可以減少比較的次數。
不過雖然折半插入會減少元素比較的次數,但因為是插入陣列,所以,只是減少元素的比較次數,元素移動的個數依然沒有改變,時間複雜度依然是o(n^2)。
演算法 常見的排序演算法 簡單排序
常見的一些排序演算法,一些是從書上看的,一些則是參考別人的部落格,從雜亂無章的部落格裡提取實屬不易,多謝理解 直接插入排序演算法的基本思路 把未排序的資料放在乙個已排序好的陣列裡面 演算法名稱 平均時間複雜度 最差時間分析 空間複雜度 穩定度直接插入排序 o n2 o n2 o 1 穩定所有排序方法...
簡單排序演算法
package com.shine.sort 排序演算法 說明 排序演算法分為三種 插入排序 交換排序 選擇排序 1.插入排序 直接插入排序 折半插入排序 希爾排序 2.交換排序 氣泡排序 快速排序 3.選擇排序 直接選擇排序 堆排序 public class mysort 希爾排序 描述 1.將乙...
簡單排序演算法
演算法思想 將初始序列 a 0 a n 1 作為待排序序列,第一趟在待排序序列 a 0 a n 1 中找最小值元素,與該序列中第乙個元素a 0 交換,這樣的子串行 a 0 有序,下一趟排序在待排序子串行 a 1 a n 1 中進行。第i趟排序在待排序子串行 a i 1 a n 1 中,找最小值元素,...