冒泡排序法
特點
1. 相鄰兩個數進行比較, 大的數往後面冒泡,每一趟比較完畢,最大的數出現在了最後面
2. 一共比較了 arr.length - 1 趟
3. 每一趟比上一趟少比較一次
代碼
public class BubbleSortDemo {
public static void main(String[] args) {
int[] arr = {24, 69, 80, 55, 13};
System.out.println("排序前: " + Arrays.toString(arr));
// 第一趟排序
/*
* arr[0] 和 arr[1]
* arr[1] 和 arr[2]
* arr[2] 和 arr[3]
* arr[3] 和 arr[4]
*
* arr[i] 和 arr[i+1]
*
* 重複的次數4
*/
/*for (int i = 0; i < arr.length - 1 - 0; i++) {
if (arr[i] > arr[i+1]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第一趟排序後: " + Arrays.toString(arr));
// 第二趟排序
* arr[0] 和 arr[1]
* arr[1] 和 arr[2]
* arr[2] 和 arr[3]
*
* arr[i] 和 arr[i+1]
* 重複的次數3
for (int i = 0; i < arr.length - 1 - 1; i++) {
if (arr[i] > arr[i+1]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第二趟排序後: " + Arrays.toString(arr));
// 第三趟排序
* arr[0] 和 arr[1]
* arr[1] 和 arr[2]
*
* arr[i] 和 arr[i+1]
* 重複的次數3
for (int i = 0; i < arr.length - 1 - 2; i++) {
if (arr[i] > arr[i+1]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第三趟排序後: " + Arrays.toString(arr));
// 第四趟排序
* arr[0] 和 arr[1]
*
* arr[i] 和 arr[i+1]
* 重複的次數3
for (int i = 0; i < arr.length - 1 - 3; i++) {
if (arr[i] > arr[i+1]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第四趟排序後: " + Arrays.toString(arr));*/
//通過以上代碼發現的規律,將代碼進行優化的冒泡排序法
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]) {
int temp = 0;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println("冒泡排序後: " + Arrays.toString(arr));
}
}
選擇排序
特點
1.選擇排序是每個元素依次和後面所有元素進行比較,第一趟排序後,最小的數就出現在做前面
2.一共比較了 arr.length - 1趟
3.每一趟比上一趟少比較1次
4.每一趟比較的數的起始位置是上一趟的起始位置 + 1
代碼
public class SelectSortDemo {
public static void main(String[] args) {
int[] arr = {44, 89, 100, 77, 33};
System.out.println("選擇排序前: " + Arrays.toString(arr));
// 第一趟排序
/*
* arr[0] 和 arr[1]
* arr[0] 和 arr[2]
* arr[0] 和 arr[3]
* arr[0] 和 arr[4]
*
* 一共比較了 arr.length - 1 次
*/
/*int i = 0; // 5 1 ~ 5 1234
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.println("第一趟排序後: " + Arrays.toString(arr));
i = 1; // 5 2 ~ 5 234
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.println("第二趟排序後: " + Arrays.toString(arr));
i = 2; // 5 2 ~ 5 234
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.println("第三趟排序後: " + Arrays.toString(arr));
i = 3; // 5 2 ~ 5 234
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.println("第四趟排序後: " + Arrays.toString(arr));*/
// //通過以上代碼發現的規律,將代碼進行優化的選擇排序法
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println("選擇排序後: " + Arrays.toString(arr));
}
}
插入排序法
特點
(Insertion Sort)是一種簡單直觀的排序算法。
它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,
找到相應位置並插入。插入排序在實現上,在從後向前掃描過程中,
需要反覆把已排序元素逐步向後挪位,爲最新元素提供插入空間。
1.從第一個元素開始,該元素可以認爲已經被排序
2.取出下一個元素,在已經排序的元素序列中從後向前掃描
3.如果該元素(已排序)大於新元素,將該元素移到下一位置
4.重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
5.將新元素插入到該位置後
6.重複步驟2~5
代碼
public class InsertSortDemo {
public static void main(String[] args) {
int[] arr = {69, 24, 15, 31, 13};
System.out.println("排序前: " + Arrays.toString(arr));
/*
* 第一趟排序
* arr[1] 和 arr[0] 進行比較
* 比較一次
*/
/*int i = 1;
for (int j = 0; j < 1; j++) {
if (arr[i] < arr[j]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.println("第一趟排序後: " + Arrays.toString(arr));
* 第二趟排序
* arr[2] 和 arr[0] 進行比較
* arr[2] 和 arr[1] 進行比較
* 比較2次
i = 2;
for (int j = 0; j < 2; j++) {
if (arr[i] < arr[j]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.println("第二趟排序後: " + Arrays.toString(arr));
* 第二趟排序
* arr[3] 和 arr[0] 進行比較
* arr[3] 和 arr[1] 進行比較
* arr[3] 和 arr[2] 進行比較
* 比較3次
i = 3;
for (int j = 0; j < 3; j++) {
if (arr[i] < arr[j]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.println("第三趟排序後: " + Arrays.toString(arr));
* 第四趟排序
* arr[4] 和 arr[0] 進行比較
* arr[4] 和 arr[1] 進行比較
* arr[4] 和 arr[2] 進行比較
* arr[4] 和 arr[3] 進行比較
* 比較4次
i = 4;
for (int j = 0; j < 4; j++) {
if (arr[i] < arr[j]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.println("第四趟排序後: " + Arrays.toString(arr));*/
//通過以上代碼發現的規律,將代碼進行優化的插入排序法
for (int i = 1; i < arr.length ; i++) {
for (int j = 0; j < i; j++) {
if (arr[i] < arr[j]) {
int temp = 0;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println("排序後: " + Arrays.toString(arr));
}
}