数据结构基础之排序算法分析

排序算法分类:
大致分为 直接插入排序 选择排序 冒泡排序 快速排序 堆排序 基数排序 归并排序 希尔排序几种;

(1)直接插入排序算法分析:
时间复杂度:
1. 最好情况:O(n)
2. 平均情况:O(n^2)
3. 最坏情况:O(n^2)
4.空间复杂度:O(1)
稳定性:稳定(相同元素的相对位置不会改变)

算法步骤分析:
* 基本思想:
* 在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排
* 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数
* 也是排好顺序的。如此反复循环,直到全部排好顺序。
* 直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。
* 内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,
* 所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,
* 直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。
代码片:

public static void insertSort(int[] args) {
        //设置监听变量
        int in,out;
        for(out = 1;out < args.length;out++) {
            //初期数值缓存
            int catcheValue = args[out];
            in = out;
            while(in >0&&args[in]<args[in-1]) {
                args[in]=args[in-1];
                --in;
            }
            catcheValue = args[in];
        }
    }

(2)冒泡排序:
时间复杂度:
1. 最好情况:O(n)
2. 平均情况:O(n^2)
3. 最坏情况:O(n^2)
4.空间复杂度:O(1)
稳定性:稳定
算法步骤分析:
1、从第一个数据开始,与第二个数据相比较,如果第二个数据小于第一个数据,则交换两个数据的位置。
2、指针由第一个数据移向第二个数据,第二个数据与第三个数据相比较,如果第三个数据小于第二个数据,则交换两个数据的位置。
  3、依此类推,完成第一轮排序。第一轮排序结束后,最大的元素被移到了最右面。
  4、依照上面的过程进行第二轮排序,将第二大的排在倒数第二的位置。
  5、重复上述过程,没排完一轮,比较次数就减少一次。
代码片:

public static void bubbleSort(int[] arr) {
        for(int i = 0;i<arr.length-1;i++) {
            for(int j = 0;j<arr.length-i-1;j++) {
                if(arr[j]>arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }

(3)选择排序:
选择排序是对冒泡排序的改进,它的比较次数与冒泡排序相同,但交换次数要小于冒泡排序。当数据量较大时,效率会有很大的提升,但时间复杂度仍为O(n*n)
时间复杂度:
1. 最好情况:O(n^2)
2. 平均情况:O(n^2)
3. 最坏情况:O(n^2)
4.空间复杂度:O(1)
稳定性:不稳定
算法步骤分析:
1、从第一个元素开始,分别与后面的元素向比较,找到最小的元素与第一个元素交换位置;
 2、从第二个元素开始,分别与后面的元素相比较,找到剩余元素中最小的元素,与第二个元素交换;
   3、重复上述步骤,直到所有的元素都排成由小到大为止。
代码片:

    public static void chooseSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int least = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[least]) {
                    least = j;
                }
            }
           //找到当前要替换的元素之后,进行替换
            int temp = arr[i];
            arr[i] = arr[least];
            arr[least] = temp;
        }
    }  

未完待续。。。

猜你喜欢

转载自blog.csdn.net/qq_37779333/article/details/82461758