算法思想:

选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。

具体思路:

我们通过记录最小下标进行排序。但有几个需要注意的的地方。

首先,我们将被排序的数组,分为两个部分:有序区和无序区。

我们在每一轮的寻找中最小值下标后记得交换,然后一定要将最小值下标再次初始化为第二个(假设刚刚是第一轮查找)(这个初始下标也成了分界有序区和无序去的下标),并且我们每次都要寻找到新的无序区的最小的下标。

函数样例:

void selectionSort(int arr[], int n) 
{ 
    int i, j, min_idx; 
  
    // 一个接着一个,将无序区的排列为有序
    for (i = 0; i < n-1; i++) 
    { 
        // Find the minimum element in unsorted array 
        min_idx = i; //一定要记得有初始化,而且他的位置在这里哦。
        //及上面提及的从新开始寻找最小值。
        for (j = i+1; j < n; j++) 
          if (arr[j] < arr[min_idx]) 
            min_idx = j; 
  
        //交换最小值和其自己
        //我们在这里可以加一个判断,来(可能)减少其交换次数
        //if(i! = min_idx)//如果使用的话,记得加大括号将下面的三个都括起来哦
        int t = arr[min_idx];
        arr[min_idx] = arr[i];
        arr[i] = t;
        
        
    } 
}

也许我们都会陷入一个又一个的坑,希望能帮助大家,踩坑多么有意义啊。