資料結構與演算法 基礎排序
排序是演算法的基礎
目錄
基礎排序
選擇排序
- 首先,找到陣列中最小的那個元素
- 其次,將它和陣列的第一個元素交換位置(如果第一個元素就是最小元素那麼它就和自己交換)
- 再次,在剩下的元素中找到最小的元素,將它與陣列的第二個元素交換位置。如此往復,直到將整個陣列排序。這種方法叫做選擇排序,因為它在不斷地選擇剩餘元素之中的最小者。
插入排序
- 人們整理橋牌的方法是一張一張的來, 將每一張牌插入到其他已經有序的牌中的適當位置。
- 在計算機的實現中,為了給要插入的元素騰出空間,我們需要將其餘所有元素在插入之前都向右移動一位。
希爾排序
- 希爾排序的思想是使陣列中任意間隔為h的元素都是有序的。這樣的陣列被稱為h有序陣列。
- 換句話說,一個h有序陣列就是h個互相獨立的有序陣列編制在一起組成的一個陣列。在進行排序的時候,如果h很大,我們能夠將元素移動到很遠的地方,為了實現更小的h有序創造方便,用這種方式,對於任意以1結尾的h序列,我們都能夠將陣列排序,這就是希爾排序。
public class Sort {
public static void main(String[] args) {
int[] c = { 3, 2, 1, 6, 5, 7 };
print(c);
// selectionSort(c);
// insertSort(c);
shellSort(c);
}
static void selectionSort(int[] c) {
for (int i = 0; i < c.length; i++) {
int min = i;
for (int j = i + 1; j < c.length; j++) {
if (c[j] < c[min]) {
min = j;
}
}
int temp = c[i];
c[i] = c[min];
c[min] = temp;
}
print(c);
}
static void insertSort(int[] c) {
for (int i = 0; i < c.length; i++) {
int now = i;
for (int j = i - 1; j >= 0; j--) {
if (c[j] > c[now]) {
int temp = c[j];
c[j] = c[now];
c[now] = temp;
now = j;
}
}
}
print(c);
}
static void shellSort(int[] c) {
int step = 1;
while (step < c.length / 3) {
step = step * 3 + 1;
}
while (step >= 1) {
for (int i = 0; i < c.length; i++) {
int now = i;
for (int j = i - step; j >= 0; j = -step) {
if (c[j] > c[now]) {
int temp = c[j];
c[j] = c[now];
c[now] = temp;
now = j;
}
}
}
step =step-1;
}
print(c);
}
static void print(int[] c) {
for (int i : c) {
System.out.print(i + " ");
}
System.out.println();
}
}
相關文章
- 演算法與資料結構基礎 - 排序(Sort)演算法資料結構排序
- 資料結構與演算法——排序演算法-基數排序資料結構演算法排序
- 《資料結構與演算法》之十大基礎排序演算法資料結構演算法排序
- JavaScript 資料結構與基礎演算法JavaScript資料結構演算法
- 資料結構與演算法 基礎概念資料結構演算法
- 資料結構與演算法——排序資料結構演算法排序
- 基礎夯實:基礎資料結構與演算法(一)資料結構演算法
- 【資料結構與演算法】非比較排序(計數排序、桶排序、基數排序)資料結構演算法排序
- 資料結構和演算法面試題系列—排序演算法之基礎排序資料結構演算法面試題排序
- 演算法資料結構 | 圖論基礎演算法——拓撲排序演算法資料結構圖論排序
- 資料結構與演算法(1)- 基礎概念資料結構演算法
- 資料結構與演算法——基礎篇(一)資料結構演算法
- 【資料結構基礎應用】【查詢和排序演算法】資料結構排序演算法
- 資料結構與演算法(八):排序資料結構演算法排序
- 資料結構與演算法之排序資料結構演算法排序
- 資料結構與演算法:堆排序資料結構演算法排序
- 【資料結構與演算法】堆排序資料結構演算法排序
- 資料結構與演算法——堆排序資料結構演算法排序
- 資料結構與演算法----# 一、排序資料結構演算法排序
- [資料結構與演算法] 排序演算法資料結構演算法排序
- 資料結構與演算法——排序演算法-歸併排序資料結構演算法排序
- 資料結構與演算法——排序演算法-氣泡排序資料結構演算法排序
- 資料結構與演算法——排序演算法-選擇排序資料結構演算法排序
- 資料結構與演算法 排序與搜尋資料結構演算法排序
- 基礎面試題 — 資料結構與演算法面試題資料結構演算法
- 資料結構與演算法之基礎知識資料結構演算法
- 資料結構與演算法 進階排序資料結構演算法排序
- Java資料結構與排序演算法 (三)Java資料結構排序演算法
- Java資料結構與排序演算法 (一)Java資料結構排序演算法
- Java資料結構與排序演算法 (二)Java資料結構排序演算法
- 資料結構與演算法-反轉排序資料結構演算法排序
- 【資料結構與演算法】歸併排序資料結構演算法排序
- 資料結構與演算法之快速排序資料結構演算法排序
- 演算法與資料結構基礎 - 連結串列(Linked List)演算法資料結構
- 資料結構與演算法整理總結---排序 2資料結構演算法排序
- 資料結構與排序資料結構排序
- 演算法與資料結構基礎 - 分治法(Divide and Conquer)演算法資料結構IDE
- 資料結構與演算法——十個排序演算法資料結構演算法排序