一、冒泡排序
- 实现思想:比较相邻的两个元素,第一个比第二个大,就交换他们,第一轮交换下来,最大的数一定在最后一个,第二轮下来,第二大的数就会在倒数第二的位置…
例如对数组[2,1,4,8,6,3]进行冒泡排序:相邻数的比较,左边大,交换两个数
第一轮:1,2,4,6,3,8 ==》找出了最大的数
第二轮:1,2,4,3,6, 8 ==》找出了第二大的数
第三轮:1,2,3,4,6, 8 ==》找出了第三大的数
第四轮:1,2,3,4,6,8 ==》找出了第四大的数
第五轮:1,2,3,4,6,8 ==》找出了第五大的数
(注意这里恰好第三轮下来就排好序了,第四大的数和第五大的数刚好在自己位置上,不需要交换)
6个数经过五轮,确定了五个数的位置,剩下的一个自然也就确定了,也就是6个数经过5轮可以变成有序序列,n个数自然经过n-1轮即可。
2. 时间复杂度:O(n2)
3. 实现代码:
public class Test {
//测试:
public static void main(String[] args) {
int[] arr = {6,5,4,3,2,1};
bubbleSort(arr);
for (int i : arr) {
System.out.print(i);
}
}
public static void bubbleSort(int[] a){
//n个数冒泡排序;
for (int i = 0; i < a.length - 1; i++) { //轮数:n-1轮
for (int j = 0; j < a.length-1-i; j++) { //每一轮确定最后一位
if (a[j] > a[j+1]){//左边大,交换
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
}
二、选择排序
- 实现思想:在一组无序的数列中,选择一个数为基数,第一个数就好,其他数和它比较,记下比它小的数的下标,这个比它小的数继续和后面的数比较,找出比它小的数的下标,一轮下来就可以找到最小的数,把这个最小的数放在第一个位置,下一轮从第二个数开始比较,找到第二个数开始后面的最小数放在第二个位置…
- 时间复杂度:O(n2)
- 实现代码:
public class Test {
//测试:
public static void main(String[] args) {
int[] arr = {6,5,4,3,2,1};
selectionSort(arr);
for (int i : arr) {
System.out.print(i);
}
}
public static void selectionSort(int[] a){
for (int i = 0; i < a.length-1; i++) {
int index = i;
for (int j = i + 1; j < a.length; j++) {
if (a[j] < a[index]){
index = j;
}
}
//最小数的下标为index
int temp = a[index];
a[index] = a[i];
a[i] = temp;
}
}
}
三、插入排序
- 实现思想:将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,和前面的有序序列进行比较,前面有序序列的数比插入的数大,有序序列的数往后移一位,直到插入的数比有序序列的数大,说明找到了要插入的位置,为这个数的后一位。
- 时间复杂度:O(n2)
- 实现代码:
public class Test {
//测试:
public static void main(String[] args) {
int[] arr = {3,5,8,3,7,1};
insertionSort(arr);
for (int i : arr) {
System.out.print(i);
}
}
public static void insertionSort(int[] a){
for (int i = 1; i < a.length; i++) {
int temp = a[i];//要插入的数
for (int j = i-1; j >= 0; j--) {
if (temp < a[j]){
//插入的数 比前面有序数列中的数小===》有序数列中的数后移
a[j+1] = a[j];
}else{
//插入的数 比前面有序数列中的数大===》说明找到了要插入的位置
a[j+1] = temp;
break;
}
// 第一个数j=0,temp < a[0]的话,temp要插在第一位
if (j == 0 && temp < a[j]){
a[j] = temp;
}
}
}
}
}