基本思想:
在要排序的一組數中,假設前面(n-1) [n>=2] 個數已經是排 好順序的,現在要把第n個數插到前面的有序數中,使得這n個數
也是排好順序的。如此反覆迴圈,直到全部排好順序。
public
void
insertsort
(int
a)// 陣列長度
int length = a.length;
// 要插入的數
int insertnum;
// 插入的次數
for(
int i =
1; i < length; i++
)// 將需要插入的數放在要插入的位置。
a[j +1]
= insertnum;
} system.out.
println
("\n排序後資料:");
for(
int i =
0; i < a.length; i++
)}
直接插入排序輸出:
排序前資料:
32 43 23 13 5
排序後資料:
5 13 23 32 43
基本思想
希爾排序的誕生是由於插入排序在處理大規模陣列的時候會遇到需要移動太多元素的問題。希爾排序的思想是將乙個大的陣列「分而治之」,劃分為若干個小的陣列,以 gap 來劃分,比如陣列 [1, 2, 3, 4, 5, 6, 7, 8] ,如果以 gap = 2 來劃分,可以分為 [1, 3, 5, 7] 和 [2, 4, 6, 8] 兩個陣列(對應的,如 gap = 3 ,則劃分的陣列為: [1, 4, 7] 、 [2, 5, 8] 、 [3, 6] )然後分別對劃分出來的陣列進行插入排序,待各個子陣列排序完畢之後再減小 gap 值重複進行之前的步驟,直至 gap = 1 ,即對整個陣列進行插入排序,此時的陣列已經基本上快排好序了,所以需要移動的元素會很小很小,解決了插入排序在處理大規模陣列時較多移動次數的問題。
/**
* 希爾排序
** @param a
*/public
void
shellsort
(int a)
a[j + length]
= temp;}}
if(length ==1)
} formatprint.
print
("排序後資料:"
, a)
;}
基本思想
在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。
/**
* 簡單選擇排序
** @param a
*/public
void
******sort
(int
a)}// 與待比較的數進行交換位置
a[position]
= a[i]
; a[i]
= temp;
} formatprint.
print
("排序後資料:"
, a)
;}
氣泡排序(bubble sort)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
基本思想
比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
針對所有的元素重複以上的步驟,除了最後乙個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
/**
* 氣泡排序
* * @param a
*/public
void
bubblesort
(int a)
}}formatprint.
print
("排序後資料:"
, a)
;}
排序演算法總結
1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...
排序演算法總結
1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...
排序演算法總結
學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...