1.冒泡法排序:算法
思想:spa
每一次排序,都是將兩個相鄰的數進行比較,將大的數移動的右邊。.net
將會將最在原數放到最後。排序
@Test get
public void test1() {class
int[] a = { 4, 7, -923, 3, 4, 5, 5, 6, 7, 7, 4, 2, 2, 4, 4, 56, 546, 7, 678, 678, 89, 57, 45, 234, 234, 34, -90,test
5, 676, 7, 2, 0, 5 };變量
for (int i = 0; i < a.length; i++) {循環
// 每一次計算時,最後一個數不在循環內,且已經比較過的最後的數,不參與再次比較bug
for (int j = 0; j < a.length - 1 - i[H1] ; j++) {
if (a[j] > a[j + 1]) {
int tem = a[j + 1];// 設置臨時變量
a[j + 1] = a[j];
a[j] = tem;
print(a);
System.err.println();
}
}
}
2.選擇法排序:
第一次選擇一個最小的數,放到前前面 – 下標便是0。
第二次選擇一個次的數放到下標爲1的位置。
public void test() {
int[] a = { 4, 7, -923, 3, 4, 5, 5, 6, 7, 7, 4, 2, 2, 4, 4, 56, 546, 7, 678, 678, 89, 57, 45, 234, 234, 34, -90,
5, 676, 7, 2, 0, 5 };
for (int i = 0; i < a.length; i++) {
// 聲明最小的數
int small = a[i];
// 聲明一個更小的數的下標的位置
int index = -1;
for (int j = i + 1; j < a.length; j++) {
if (small > a[j]) {
small = a[j];// 設置更小的數是a[j]
index = j;// 記錄下標
}
}
// 判斷是否找到了更小的數
if (index != -1) {
// 交換位置
a[index] = a[i];
a[i] = small;
}
}
print(a);
}
3.快速排序
思想:
二分法。取出任意的一個數[下標爲0的數]認爲它的中間數。將所小於這個數的數,放到左邊,將大於這個數的數放到右邊。
再分另比較中間這個數的兩邊的數據。
排序算法:
4 2 7 0 5
第一次排序:
0 2 4 7 5
第二次排序:
0 2 4 7 5
第三次排序:
0 2 4 5 7
public void test3() {
int[] a = { -90, 5, 676, 7, 2, 0, 5 };
sort(a, 0, a.length - 1);
}
public void sort(int[] a, int from, int to) {
int left = from;
int right = to;
int mid = a[left];
while (left < right) {// 若是左邊的下標還小於右邊的下標的話,就能夠進行比較
// 先從右向左找從mid小的
for (int i = right; i > left; i--, right--) {
if (a[i] < mid) {
a[left] = a[i];
a[i] = mid;
break;
}
}
// 再從左向右比較找比mid大的
for (int i = left; i < right; i++, left++) {
if (a[i] > mid) {
a[right] = a[i];
a[i] = mid;
break;
}
}
}
print(a);
// 若是開始的下標小於結束下標纔有必要比較
if (from < left - 1) {
sort(a, from, left - 1);
}
if (right + 1 < to) {
sort(a, right + 1, to);
}
}