直接选择排序算法时间空间复杂度

    科技2022-08-19  115

    思想: 每次找出最小数的坐标,然后与前面交换位置。

    代码:

    ```java int[] arr = new int[]{2,2,3,1} for(int i=0;i<arr.length-1;i++){ //每一轮,找到最小数对应的下标 int minIndex = i; for(int j=i+1;j<arr.length;j++){ if(arr[j]<arr[minIndex]){ minIndex = j; } } //交换i和最小数的位置 if(i != minIndex){ int tmp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tmp; } }

    时间复杂度:

    比较 第一次从1到n-1中选出最小的数,与A[0]交换位置 第二次从2到n-1中选出最小的数,与A[1]交换位置 … 总共比较次数:n-1 + n-2 + … +1 = n(n-1)/2

    交换 最好,有序,只比较不交换,交换次数为0 最坏,逆序,每次选出一个最小的数都需要交换位置,交换次数n-1

    所以O(n) = n(n-1)/2

    空间复杂度: 最好,不交换,不用临时变量,O(0) 最坏,每次交换,用n-1个临时变量,O(n) 平均,O(1)

    Processed: 0.016, SQL: 9