【算法与数据结构】经典排序算法总结

版权声明:本文为博主Colin原创文章,欢迎转载。 https://blog.csdn.net/colinandroid/article/details/82931296

1. 冒泡排序

在这里插入图片描述
时间复杂度:o(n2)
过程:
一开始交换的区间是0-(N-1),也就是整个数组的整体;然后第一个数与第二个数进行比较,哪个大,哪个就放在后面;然后第二个数与第三个数进行比较,哪个大,哪个就放在后面;这样依次交换下去,最大的数就被放到了最后;然后把交互区间从0-(N-1),变为0-(N-2),这样第二大的数就被放到数组倒数第二的位置;这个过程进行下去,直到区间就只有一个数;这样数组就变成了有序数据。

import java.util.*;

public class BubbleSort {
    public int[] bubbleSort(int[] A, int n) {
        for(int i=n-1;i>0;i--) {
            for(int j=0;j<i;j++) {
                if(A[j+1]<A[j]){
                    int t = A[j];
                    A[j] = A[j+1];
                    A[j+1] = t;
                }   
            }
        }
        return A;
    }
}

2. 选择排序

在这里插入图片描述
时间复杂度:o(n2)
过程:
一开始在整个数组上,也就是区间0-(N-1)上,选出一个最小值,把它放到位置0上;然后在区间1-(N-1)上,选出一个最小值,把它放到位置1上;这样依次缩小范围,直到区间内只有一个元素,那这个数组就变得有序了。

import java.util.*;

public class SelectionSort {
    public int[] selectionSort(int[] A, int n) {
        for(int i = 0; i<n; i ++) {
            for(int j = i + 1; j< n; j++) {
                if(A[i] > A[j]) {
                    int t = A[i];
                    A[i] = A[j];
                    A[j] = t;
                }
            }
        }
        return A;
    }
}

3. 插入排序

在这里插入图片描述
时间复杂度:o(n2)
过程:
首先位置1上的数跟位置0上的数进行比较,如果位置1上的数更小,那位置0上的数就向前移,把位置1上的数放到位置0上;接着位置2上的数跟位置1上的数进行比较,如果比位置1上的数小,那位置1上的数向前移,接着跟位置0上的数进行比较,如果比位置0上的数小,那位置0上的数接着向前移,然后把位置2上的数放到位置0上;那么对于位置k上的数,就一直跟前面的数进行比较并向前移,直到小于等于它,并把位置k上的数放到这个位置。

import java.util.*;

public class InsertionSort {
    public int[] insertionSort(int[] A, int n) {
        // write code here
        for(int i=1;i<n;i++) {
            int current = A[i];
            for(int j=i-1;j>=0;j--) {
                if(current >=A[j]) {
                    break;
                }else{
                    A[j+1] = A[j];
                    A[j]=current;
                }
            }
        }
        return A;
    }
}

猜你喜欢

转载自blog.csdn.net/colinandroid/article/details/82931296