题意整理。

  • 键盘随机输入6个整数,保存到数组中。
  • 使用选择排序对数组中的元素进行排序,输出排序后的元素。

方法一(选择排序)

1.解题思路

  • 外层循环遍历前len-1个元素,内层循环中,使用临时遍历min记录最小值所在下标,遍历当前元素后面所有元素,比较得出最小值所在下标。
  • 每次内层循环走完,交换i、min位置元素。

动图展示: alt

2.代码实现

#include <iostream>
using namespace std;

int main() {

    int arr[6] = { 0 };
    int len = sizeof(arr) / sizeof(int);
    
    for (int i = 0; i < len; i++) {
        cin >> arr[i];
    }
    
    //外层循环遍历前len-1个元素
    for(int i=0;i<len-1;i++){
        //使用临时遍历min记录最小值所在下标
        int min=i;
        //遍历当前元素之后所有元素,比较得出最小值所在下标
        for(int j=i+1;j<len;j++){
            if(arr[min]>arr[j]){
                min=j;
            }
        }
        //交换i、min位置元素,即把当前最小值移到i所在位置
        int temp=arr[i];
        arr[i]=arr[min];
        arr[min]=temp;
    }
    
    for(int i=0;i<len;i++){
        cout<<arr[i]<<" ";
    }

    return 0;
}

3.复杂度分析

  • 时间复杂度:循环最多执行n(n1)/2n*(n-1)/2次,所以时间复杂度为O(n2)O(n^2)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)