几种常见的排序:冒泡,插入,选择,快速,归并排序
关系:排序是查找的前提
代码
1.冒泡排序(BubbleSort)
public class BubbleSort {
/** *
* 冒泡排序
* 从第一个元素开始依次和后面的元素比较,并交换位置
* 从第二个元素开始依次和剩下的元素比较,并交换位置
* 如此往复
*/
public static void main(String[] args) {
Integer[] arr = { 4, 5, 9, 8, 1, 2, 6, 7, 3 };
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
//每比较一次就就交换一次位置
int mid = arr[i];
arr[i] = arr[j];
arr[j] = mid;
}
}
}
}
}
2 快速排序
public class FastSort {
/**
* 快速排序
* 先定义一个min代表当此循环的最小元素的下标
* 先比较得到数组中最小的元素,然后与第一个元素交换位置
* 然后在剩下的数组中找到最小的元素,与第二个元素交换位置
* 如此往复
*/
public static void main(String[] args) {
Integer[] arr = {4,5,9,8,1,2,6,7,3};
for(int i =0;i<arr.length;i++){
int min = i;
//先不断比较得到最小值的下标
for(int j=i+1;j<arr.length;j++){
if (arr[min]>arr[j])
min=j;
}
//本次循环比较完毕后再交换位置
int mid = arr[i];
arr[i]=arr[min];
arr[min] = mid;
}
}
}
3 插入排序
public class InsertSort {
/**
* 插入排序
* 把待排序数组看成2部分:有序部分和无序部分
* 有序部分从0开始向后排序,依次循环到最后一个元素
*/
public static void main(String[] args) {
Integer[] arr = { 4, 5, 9, 8, 1, 2, 6, 7, 3 ,0};
for (int i = 0; i < arr.length; i++) {
//长度为i的数组内,第i个依次和前面的比较并排序
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
}
}
4 .选择排序
public class ChooseSort {
/**
* 选择排序:
* 每次从未排序序列中选出最小元素
* 和前面已排序序列的最后一个交换位置
*/
public static void main(String[] args) {
Integer[] arr = { 8, 1, 3, 5, 2, 9, 0, 7, 4 };
for (int i = 0; i < arr.length-1; i++) {
int min = i;
//找到该次剩余元素的最小值
for (int j = min + 1; j < arr.length; j++) {
if (arr[min] > arr[j]) {
min = j;
}
}
//与已排序的序列的最后一个值交换位置
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
System.out.println(11);
}
}