排序算法-Java实现

常见的八种排序分类:

【冒泡排序】

原理:相邻两个数据进行两两比较,较大的放在右侧,较小的放在左侧。从开始到最后,所以最后一位是最大的。重复上述操作,除了最后一个

Java代码:

1 for (int i = 0; i < arr.length - 1; i++) {
2             for (int j = 0; j < arr.length - i - 1; j++) {
3                 if (arr[j] > arr[j + 1]) {
4                     int temp = arr[j];
5                     arr[j] = arr[j + 1];
6                     arr[j + 1] = temp;
7                 }
8             }
9 }

 【快速排序】

 

原理:先从数列中取出一个数作为key值;将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;对左右两个小数列重复第二步,直至各区间只有1个数

 java代码:

 1 public static void quickSort(int[] arr, int low, int high) {
 2         int i, j, temp, t;
 3         if (low > high) return;
 4         i = low;
 5         j = high;
 6         //temp就是基准位
 7         temp = arr[low];
 8 
 9         while (i < j) {
10             //先看右边,依次往左递减
11             while (temp <= arr[j] && i < j) {
12                 j--;
13             }
14             //再看左边,依次往右递增
15             while (temp >= arr[i] && i < j) {
16                 i++;
17             }
18             //如果满足条件则交换
19             if (i < j) {
20                 t = arr[j];
21                 arr[j] = arr[i];
22                 arr[i] = t;
23             }
24 
25         }
26         //最后将基准为与i和j相等位置的数字交换
27         arr[low] = arr[i];
28         arr[i] = temp;
29         //递归调用左半数组
30         quickSort(arr, low, j - 1);
31         //递归调用右半数组
32         quickSort(arr, j + 1, high);
33     }

【插入排序】

原理:直接插入排序是将一个待排序的记录,插入到前面已经排好序的有序序列中去,如此反复循环,直到全部排好顺序为止。

 1 public void insertSort() {
 2         int i, j, temp;
 3         for (i = 1; i < array.length; i++) {
 4             temp = array[i];
 5             for (j = i - 1; j >= 0; j--) {
 6                 if (temp > array[j]) {
 7                     break;
 8                 } else {
 9                     array[j + 1] = array[j];
10                 }
11             }
12             array[j + 1] = temp;
13         }
14     }

【选择排序】

 

原理:简单选择排序是每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,属于不稳定排序。 

 1 public void selectSort() {
 2         int i, j, index;
 3         for (i = 0; i < array.length; i++) {
 4             index = i;
 5             for (j = i + 1; j < array.length; j++) {//遍历找到最小值
 6                 if (array[j] < array[index]) {
 7                     index = j;
 8                 }
 9             }//将遍历出来的最小值,放在前面
10             int temp = array[i];
11             array[i] = array[index];
12             array[index] = temp;
13         }
14 }

参考文档:

https://baijiahao.baidu.com/s?id=1630690516749462635&wfr=spider&for=pc

https://blog.csdn.net/qq_42857603/article/details/81605124

原文地址:https://www.cnblogs.com/starstarstar/p/11093911.html