Java数组冒泡,选择,插入三种常用排序法及自带的快速排序法

来源:互联网 发布:php要学多久可以工作 编辑:程序博客网 时间:2024/05/09 05:46

int[] arr = { 4, 9, 8, 7, 8, 5, 1, 9, 88 };
bubbleSort(arr);
// selectSort(arr);
// insertSort(arr);
System.out.println(Arrays.toString(arr));



1.冒泡排序

冒泡排序广泛用于数组排序,大致原理就是从第一个数开始,通过和后面一个数相比较,将较大的往后挪,一一比较之后,将最大的放到最下面。第一次比较完毕将最大的数字放到最后面,第二次比较结束以后将第二大的数字放到倒数第2位,依次进行。

其中,第5行之所以要减去(i+1),是因为每放一个最大的数字到最下面,他们就不用再比较了,也就是说它们的位置就定好了。第i次循环的时候,就已经有i+1个不用做基本比较数字了。这样做只是为了提高效率。

// 冒泡排序法;两两相互比较,大的数跟后面的数交换位置,以此类推
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length; 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;
}
}
}
}

2.选择排序
先找到整个数组里面的最小值,将其和数组的第一个数值进行交换。然后在除了第一个数值之外的剩下的数组里面进行搜索,找到最小的数值,将其和整个数组的第二个数值交换。依次进行,直到最后一个数值。

// 选择排序法:找到最小数的索引,与第i个数交换位置,以此类推
public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int min = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
min = j;
}
}
// 找到了最小值的下标min
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}

3.插入排序
顾名思义,假设第0个元素已经在正确的位置上,从第1个元素开始,依次和左边已经排好的序列进行比较,将值插入到左边合适的位置上。

// 插入排序法:假设前面的数已经有了顺序,在将要插入的数按照原来的规律插入到其中
public static void insertSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
// 保存要插入的数
int temp = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}

4.数组自带的静态方法

这个方法是Arrays.sort(int[ ] values);

直接使用就可以了。怎么说呢?选择排序算法最主要考虑的就是效率,数组自带的这个排序方法叫做快速排序方法。看名字就知道效率最高,所以说默认情况下,就直接使用这个就行了。
0 0