Java中常用的排序方法
冒泡,选择,插入,快速,最重要的是掌握思想
1,冒泡排序
int[] arr = {13,4,423,52,344,12};
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 = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
System.out.println("第"+(i+1)+"次"+Arrays.toString(arr));
}
}
System.out.println(Arrays.toString(arr));
原理:比较从第一个元素开始,比较相邻的两个元素,将最大的元素放在右边
思路:依次比较相邻的两个数,将最小的放在前面,最大的放在后面。第一次比较:首先比较第一个和第二个数,小的放在前面,大的放在后面。例如:
2,选择排序
int[] arr = {13, 4, 423, 52, 344, 12};
for (int i = 0; i < arr.length - 1; i++) {
int min = i;
for (int j = i+1; j < arr.length; j++) { //选最小的记录
if(arr[min] > arr[j]) {
min = j; //找到最小值所在的位置
}
}
//内层循环结束,找到本轮循环的最小数后,进行交换
if(min != i){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
System.out.println("第"+(i+1)+"次"+Arrays.toString(arr));
}
System.out.println(Arrays.toString(arr));
原理:从排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。例如:
3,插入排序
int[] arr = {13, 4, 423, 52, 344, 12};
int i,j,temp;
for (i = 1; i < arr.length; i++) {
//temp为本次循环待插入有序列表中的数
temp = arr[i];
//寻找temp插入有序列表的正确位置
for (j = i; j > 0 && arr[j - 1] > temp; j--) {
arr[j] = arr[j - 1]; //元素前移,为插入temp做准备
}
arr[j] = temp;
System.out.println("第"+i+"次"+Arrays.toString(arr));
}
System.out.println(Arrays.toString(arr));
原理:从第一个元素开始,该元素可以认为已经被排序,取出下一个元素,进行排序,如果该元素大于新元素,该元素移到下一位置,然后不断重复。例如:
4,快速排序
public static void quickSort(int[] arr, int low, int high){
//定义四个变量,i表示左边,j表示右边,temp表示基准位,t中间变量
int i,j,temp,t;
if(low > high){
return;
}
i = low;
j = high;
temp = arr[low];//temp就是基准位
while(i<j){
//先看右边,依次往左递减
while (temp <= arr[j] && i<j) {
j--;
}
//再看左边,依次往右递增
while (temp >= arr[i] && i<j){
i++;
}
//如果满足条件则交换
if(i < j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
arr[low] = arr[i];
arr[i] = temp;
//递归调用左半数组
quickSort(arr, low,j-1);
//递归调用右半数组
quickSort(arr, j+1, high);
}
public static void main(String[] args) {
int[] arr = {13, 4, 423, 52, 344, 12};
quickSort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
基本思想:找一个基准数(用来参照的数),通过一趟排序将要排序的数据分成两个独立的部分,一边的所有数据比另一边的小,然后按照这样的方法对这两部分进行快速排序,整个排序过程可以递归进行。例如:
下一章,(10)Java中的面向对象