选择排序-较为详细的分析
算法思想:
选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。
具体思路:
我们通过记录最小下标进行排序。但有几个需要注意的的地方。
首先,我们将被排序的数组,分为两个部分:有序区和无序区。
我们在每一轮的寻找中最小值下标后记得交换,然后一定要将最小值下标再次初始化为第二个(假设刚刚是第一轮查找)(这个初始下标也成了分界有序区和无序去的下标),并且我们每次都要寻找到新的无序区的最小的下标。
函数样例:
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;
}
}
也许我们都会陷入一个又一个的坑,希望能帮助大家,踩坑多么有意义啊。