选择排序是比较简单而且直观的算法,它的原理是在待排序的序列中找出最小值(或者最大值),然后将最小值(或最大值)放在待排序的序列的最左边,然后继续从剩下的序列中寻找最小值(或者最大值),放在已排序的序列的后边,直到排序完成。这就跟我们上体育课时,老师让我们按照身高从低到高(或者从高到低)排队站好一样。
选择排序(选择最小值)的代码如下:
#include <stdio.h>
#define ARRAY_LEN 10
void array_print(int *array,int array_len);
int swap(int *x,int *y);
void select_sort(int *array,int array_len);
int main(void)
{
int a[ARRAY_LEN] = {10,80,0,70,30,60,20,40,90,50};
array_print(a,ARRAY_LEN);
select_sort(a,ARRAY_LEN);
array_print(a,ARRAY_LEN);
return 0;
}
void array_print(int *array,int array_len)
{
int index;
for(index= 0;index< array_len;index++)
{
if(index == array_len-1)
{
printf("%d\n",array[index]);
}
else
{
printf("%d,",array[index]);
}
}
}
int swap(int *x,int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
void select_sort(int *array,int array_len)
{
int i,j,min;
for(i = 0;i < array_len - 1;i++)
{
min = i;
for(j = i + 1;j < array_len;j++)
{
if(array[j] < array[min])
{
min = j;
}
}
swap(&array[i],&array[min]);
}
}
冒泡排序和选择排序的时间复杂度都为O(n^2),但是选择排序的速度比冒泡排序快。
小伙伴们可以试着写下选择最大值的代码哦!