目錄
1.直接插入排序
2.希爾排序
3.簡單選擇排序
4.堆排序
5.氣泡排序
6.快速排序
7.歸併排序
8.基數排序
經常碰到這樣一類排序問題:把新的資料插入到已經排好的資料列中。將第乙個數和第二個數排序,然後構成乙個有序序列
將第三個數插入進去,構成乙個新的有序序列。
對第四個數、第五個數……直到最後乙個數,重複第二步。
如何寫寫成**:
首先設定插入次數,即迴圈次數,for(int i=1;i設定插入數和得到已經排好序列的最後乙個數的位數。insertnum和j=i-1。
從最後乙個數開始向前迴圈,如果插入數小於當前數,就將當前數向後移動一位。
將當前數放置到空著的位置,即j+1。
**實現如下:
public void insertsort(int a)
a[j+1]=insertnum;//將需要插入的數放在要插入的位置。}}
對於直接插入排序問題,資料量巨大時。將數的個數設為n,取奇數k=n/2,將下標差值為k的數分為一組,構成有序序列。
再取k=k/2 ,將下標差值為k的書分為一組,構成有序序列。
重複第二步,直到k=1執行簡單插入排序。
如何寫成**:
首先確定分的組數。
然後對組中元素進行插入排序。
然後將length/2,重複1,2步,直到length=0為止。
**實現如下:
public void sheelsort(int a)
a[j + d] = temp;}}
}}
常用於取序列中最大最小的幾個數時。(如果每次比較都交換,那麼就是交換排序;如果每次比較完乙個迴圈再交換,就是簡單選擇排序。)
遍歷整個序列,將最小的數放在最前面。
遍歷剩下的序列,將最小的數放在最前面。
重複第二步,直到只剩下乙個數。
如何寫成**:
首先確定迴圈次數,並且記住當前數字和當前位置。
將當前位置後面所有的數與當前數字進行對比,小數賦值給key,並記住小數的位置。
比對完成後,將最小的值與第乙個數的值交換。
重複2、3步。
**實現如下:
public void selectsort(int a)
}a[position]=a[i];//交換位置
a[i]=key;}}
對簡單選擇排序的優化。將序列構建成大頂堆。
將根節點與最後乙個節點交換,然後斷開最後乙個節點。
重複第一、二步,直到所有節點斷開。
**實現如下:
public void heapsort(int a)}}
}
要求時間最快時。選擇第乙個數為p,小於p的數放在左邊,大於p的數放在右邊。
遞迴的將p左邊和右邊的數都按照第一步進行,直到不能遞迴。
**實現如下:
public static void quicksort(int numbers, int start, int end)
} while (i <= j);
if (start < j)
quicksort(numbers, start, j);
if (end > i)
quicksort(numbers, i, end);
}
}
速度僅次於快排,記憶體少的時候使用,可以進行平行計算的時候使用。選擇相鄰兩個數組成乙個有序序列。
選擇相鄰的兩個有序序列組成乙個有序序列。
重複第二步,直到全部組成乙個有序序列。
**實現如下:
public static void mergesort(int numbers, int left, int right)
if (i + (s - 1) < right)
merge(numbers, i, i + (s - 1), right);
}
}
private static void merge(int data, int p, int q, int r) else
k++;
}
if (s == q + 1)
b[k++] = data[t++];
else
b[k++] = data[s++];
for (int i = p; i <= r; i++)
data[i] = b[i];
}
用於大量數,很長的數進行排序時。將所有的數的個位數取出,按照個位數進行排序,構成乙個序列。
將新構成的所有的數的十位數取出,按照十位數進行排序,構成乙個序列。
**實現如下:
public void sort(int array)
}int time = 0;
//判斷位數;
while (max > 0)
//建立10個佇列;
listqueue = 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++) }}
}
八種排序演算法 Java實現
基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。實現 public class selectsort selectsort a for int i 0 i public static v...
八種基本排序演算法 java實現
將陣列公升序排列 思路 將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。2.直接插入排序 public static void ...
八種常見的排序演算法
演算法 穩定性時間複雜度 計數排序 穩定o n 基數排序 穩定o n 桶排序不穩定 o n 插入排序 穩定o n 2 歸併排序 穩定o nlogn 快速排序 不穩定o nlogn 希爾排序 不穩定o n 2 堆排序不穩定 o nlogn include include using namespace...