对数组nums[n]进行选择排序。
原理:
第一趟从nums[1]-nums[n-1]找到一个最小的和nums[0]进行比较交换。
第二趟从nums[2]-nums[n-1]找到一个最小的和nums[1]进行比较交换。
以此类推,执行n-1趟数组即有序。
时间复杂度:O(n2)
空间复杂度:O(1)
代码实现:
void function(int* nums, int size)
{
int i, j, temp, min;
for (i = 0; i < size - 1; i++)
{
min = i;
//在未排序中找到最小的
for (j = i + 1; j < size; j++)
{
min = nums[j] < nums[min] ? j : min;
}
//最小的排到有序数组中
temp = nums[i];
nums[i] = nums[min];
nums[min] = temp;
}
}
验证:
1、随机建立两个相同的数组,使用选择排序和系统自带的快速排序进行排序,得到结果再进行比较,代码如下:
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include<math.h>
//选择排序
void function(int* nums, int size)
{
int i, j, temp, min;
for (i = 0; i < size - 1; i++)
{
min = i;
for (j = i + 1; j < size; j++)
{
min = nums[j] < nums[min] ? j : min;
}
temp = nums[i];
nums[i] = nums[min];
nums[min] = temp;
}
}