选择排序:每一趟从待排序序列中找出最小值(保存它下标),和待排序序列的第一个值(保存下标),进行交换,直到待排序序列只剩下一个值
运行代码如下:
//选择排序 时间复杂度O(n^2) 空间复杂度O(1) 稳定性:不稳定
void SelectSort(int arr[], int len)
{
for(int i=0; i<len-1; i++)//趟数
{
int min_index = i;
for(int j=i+1; j<len; j++)//控制找最小值
{
if(arr[j] < arr[min_index])
{
min_index = j;
}
}
//当内层for循环跑完,此时min_index保存是就是当前待排序序列中最小值的下标
if(min_index != i)//如果找到的最小值下标 不等于 待排序序列的第一个值的下标 则才有交换的必要性
{
int tmp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = tmp;
}
}
}
void Show(int arr[], int len)
{
for(int i=0; i<len; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = {12,2,39,88,4,6,25,232,62,221};
SelectSort(arr, sizeof(arr)/sizeof(arr[0]));
Show(arr, sizeof(arr)/sizeof(arr[0]));
return 0;
}
运行结果为: