简单选择排序
思路:
每一轮从无序区中选出一个最小的数放入全局有序区,经过n-1轮,最后一个数已然是最大值,排序完成。
代码分析:
/*
简单选择排序思路:
每一轮从无序区中选出一个最小的数放入全局有序区,
经过n-1轮,最后一个数已然是最大值,排序完成。
*/
#include <stdio.h>
void select_sort(int data[],int n)
{
int i,j,min;
int temp;
for(i=0; i<n-1; i++)//做第i趟排序
{
//每轮选最一个最小的数min(下标) ,刚开始默认为第一个
min=i;
for (j=i+1; j<n; j++)
if (data[j] < data[min])
min = j;
//选出的最小值,放到有序区中
if (min != i)
{
temp = data[i];
data[i] = data[min];
data[min] = temp;
}
}
}
int main()
{
int data[] = {8,3,6,2,4,5,7,1,9,0};
printf("排序前的数据为:\n");
for(int i=0; i<10;i++)
printf("%d ",data[i]);
printf("\n\n");
select_sort(data,10);
printf("排序后的结果为:\n");
for(int i=0; i<10;i++)
printf("%d ",data[i]);
printf("\n");
return 0;
}
结果:
算法分析:
排序方法 | 时间复杂度(最好) | 时间复杂度(平均) | 时间复杂度(最坏) | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|
简单选择排序 | O(n2) | O(n2) | O(n2) | O(1) | 稳定 |