public class sortcode
a[j + 1] = insertnum;//找到位置,插入當前元素
}system.out.println("直接插入排序後的陣列為:" + arrays.tostring(a));}}
/*** 2.希爾排序
* * 針對直接插入排序的下效率問題,有人對次進行了改進與公升級,這就是現在的希爾排序。希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。
* 希爾排序是基於插入排序的以下兩點性質而提出改進方法的:
* 插入排序在對幾乎已經排好序的資料操作時, 效率高, 即可以達到線性排序的效率
* 但插入排序一般來說是低效的, 因為插入排序每次只能將資料移動一位
* 對於直接插入排序問題,資料量巨大時。
* 將數的個數設為n,取奇數k=n/2,將下標差值為k的數分為一組,構成有序序列。
* 再取k=k/2 ,將下標差值為k的書分為一組,構成有序序列。
* 重複第二步,直到k=1執行簡單插入排序。
* * **實現:
* 首先確定分的組數。
* 然後對組中元素進行插入排序。
* 然後將length/2,重複1,2步,直到length=0為止。
*/public static class sheelsort
a[k + len] = temp;}}
}system.out.println("希爾排序後的陣列為:" + arrays.tostring(a));}}
/*** 3.簡單選擇排序
* 常用於取序列中最大最小的幾個數時。
* (如果每次比較都交換,那麼就是交換排序;如果每次比較完乙個迴圈再交換,就是簡單選擇排序。)
* 遍歷整個序列,將最小的數放在最前面。
* 遍歷剩下的序列,將最小的數放在最前面。
* 重複第二步,直到只剩下乙個數。
* * **實現:
* 首先確定迴圈次數,並且記住當前數字和當前位置。
* 將當前位置後面所有的數與當前數字進行對比,小數賦值給key,並記住小數的位置。
* 比對完成後,將最小的值與第乙個數的值交換。
* 重複2、3步。
*/public static class selectsort
}a[position] = a[i];//進行交換
a[i] = value;
}system.out.println("簡單選擇排序後的陣列為:" + arrays.tostring(a));}}
/*** 4.堆排序
* 對簡單選擇排序的優化。
* 將序列構建成大頂堆。
* 將根節點與最後乙個節點交換,然後斷開最後乙個節點。
* 重複第
一、二步,直到所有節點斷開。
*/public static class heapsort
system.out.println("堆排序後的陣列為:" + arrays.tostring(a));
}//交換方法
private void swap(int data, int i, int j)
//對data陣列從0到lastindex建大頂堆
private void buildmaxheap(int data, int lastindex)
}//如果k節點的值小於其較大的子節點的值
if (data[k] < data[biggerindex]) else }}
}}
/*** 5.氣泡排序
* 很簡單,用到的很少,據了解,面試的時候問的比較多!
* 將序列中所有元素兩兩比較,將最大的放在最後面。
* 將剩餘序列中所有元素兩兩比較,將最大的放在最後面。
* 重複第二步,直到只剩下乙個數。
* * **實現:
* 設定迴圈次數。
* 設定開始比較的位數,和結束的位數。
* 兩兩比較,將最小的放到前面去。
* 重複2、3步,直到迴圈次數完畢。
*/public static class bubblesort }}
system.out.println("氣泡排序後的陣列為:" + arrays.tostring(a));}}
/*** 6.快速排序
* 要求時間最快時。
* 選擇第乙個數為p,小於p的數放在左邊,大於p的數放在右邊。
* 遞迴的將p左邊和右邊的數都按照第一步進行,直到不能遞迴。
*/public static class quicksort
public void quicksort(int a, int start, int end)
while ((a[j] > basenum) && j > start)
if (i <= j)
} while (i <= j);
if (start < j)
if (end > i) }}
}/**
* 7.歸併排序
* 速度僅次於快速排序,記憶體少的時候使用,可以進行平行計算的時候使用。
* 選擇相鄰兩個數組成乙個有序序列。
* 選擇相鄰的兩個有序序列組成乙個有序序列。
* 重複第二步,直到全部組成乙個有序序列。
*/public static class mergesort
public static int mergesort(int a,int low,int high)
}int time = 0;
//判斷位數;
while (max > 0)
//建立10個佇列;
list> queue = new arraylist>();
for (int i = 0; i < 10; i++)
//進行time次分配和收集;
for (int i = 0; i < time; i++)
int count = 0;//元素計數器;
//收集佇列元素;
for (int k = 0; k < 10; k++) }}
system.out.println("基數排序後的陣列為:" + arrays.tostring(a));}}
public static void main(string args)
private static int getints()
return a;
}}
8種排序演算法
學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說...
8種排序演算法
1.選擇排序 兩層迴圈巢狀,0到n 1選出最小的,與第0個交換,縮小集合為1到n 1,選出最小的,與第乙個交換 時間複雜度 o n2 空間複雜度 因為中間只增加了兩個新變數,儲存最小值和下標,所以空間複雜度為o 1 當陣列為已排序狀態時,仍需要n次比較,最好的情況仍需要o n2 public sta...
8種排序演算法總結
1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void sortnumber method2 int array,int length ...