排序算法例子

 

例子:17,20,5,9,10,12,6,7,1,2

升序排列

 

1.插入排序

粗体表示已排好序的序列,下划线表示每次插入的数据,为标识清楚用"|"为分界线

插入数据从已排好序的序列,从后向前依次跟每个元素比较,小于原元素就跟前一个再做比较,直到大于或等于原元素,插入

17,|20,5,9,10,12,6,7,1,2

17,20,|5,9,10,12,6,7,1,2

5,17,20,|9,10,12,6,7,1,2

5,9,17,20,|10,12,6,7,1,2

5,9,10,17,20,|12,6,7,1,2

5,9,10,12,17,20,|6,7,1,2

5,6,9,10,12,17,20,|7,1,2

5,6,7,9,10,12,17,20,|1,2

1,5,6,7,9,10,12,17,20,|2

1,2,5,6,7,9,10,12,17,20

 

2.选择排序

粗体表示已排好序的序列,下划线表示每次插入的数据,为标识清楚用"|"为分界线

每次从未排序的序列中选择最小的元素与第一个元素交换

17,20,5,9,10,12,6,7,1,2

1,|20,5,9,10,12,6,7,17,2

1,2,|5,9,10,12,6,7,17,20

1,2,5,|9,10,12,6,7,17,20

1,2,5,6,|10,12,9,7,17,20

1,2,5,6,7,|12,9,10,17,20

1,2,5,6,7,9,|12,10,17,20

1,2,5,6,7,9,10,|12,17,20

1,2,5,6,7,9,10,12,|17,20

1,2,5,6,7,9,10,12,17,|20

1,2,5,6,7,9,10,12,17,20

 

3.冒泡排序

粗体表示已排好序的序列,剩余为无序序列,每次找到无序序列中最小的元素,放在已排好序的序列最后,直到无序序列只剩一个元素,排序结束

17,20,5,9,10,12,6,7,1,2

1,17,20,5,9,10,12,6,7,2

1,2,17,20,5,9,10,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Java 中常见的几种排序算法的实现示例: 1. 冒泡排序 ```java public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { // 交换相邻元素 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` 2. 选择排序 ```java public static void selectionSort(int[] arr) { int n = arr.length; for (int i = 0; i < n - 1; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } // 交换元素 int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } ``` 3. 插入排序 ```java public static void insertionSort(int[] arr) { int n = arr.length; for (int i = 1; i < n; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } } ``` 4. 归并排序 ```java public static void mergeSort(int[] arr, int left, int right) { if (left < right) { int mid = (left + right) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); merge(arr, left, mid, right); } } public static void merge(int[] arr, int left, int mid, int right) { int n1 = mid - left + 1; int n2 = right - mid; int[] L = new int[n1]; int[] R = new int[n2]; for (int i = 0; i < n1; i++) { L[i] = arr[left + i]; } for (int j = 0; j < n2; j++) { R[j] = arr[mid + 1 + j]; } int i = 0, j = 0, k = left; while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k++] = L[i++]; } else { arr[k++] = R[j++]; } } while (i < n1) { arr[k++] = L[i++]; } while (j < n2) { arr[k++] = R[j++]; } } ``` 5. 快速排序 ```java public static void quickSort(int[] arr, int left, int right) { if (left < right) { int pivot = partition(arr, left, right); quickSort(arr, left, pivot - 1); quickSort(arr, pivot + 1, right); } } public static int partition(int[] arr, int left, int right) { int pivot = arr[right]; int i = left - 1; for (int j = left; j < right; j++) { if (arr[j] <= pivot) { i++; // 交换元素 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // 交换元素 int temp = arr[i + 1]; arr[i + 1] = arr[right]; arr[right] = temp; return i + 1; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值