对一个序列进行选择排序,首先通过一轮循环比较,从n个数据中找出最大或者最小的那个数据的位置,
然后按照递增或者递减的顺序,将此数据与第一个或最后一个数据进行交换。
然后再找第二大或者第二小的数据进行交换,
以此类推,直到序列全部有序为止。
选择排序与冒泡排序的区别在于,冒泡排序每比较一次后,满足条件的数据就交换,
而选择排序是每次比较后,记录满足条件数据的位置,一轮循环过后再作交换。
代码实例:
void SelectSort(int x[], int n)//选择排序
{
int i, j, min,k;
for (i = 0; i < n; i++)
{
min=i;
for (j = i; j < n; j++)
{
if (x[min] > x[j])
min = j;
}
k = x[i];
x[i] = x[min];
x[min] = k;
}
for (i=0;i<n;i++)
printf("%d\t",x[i]);
}
main(){
//定义无序数组
srand((unsigned)time(NULL));
int arr[10];
for (int i = 0; i < 10; i++)
{
arr[i] = rand() % 100;
printf("arr[%d]:%d\n", i, arr[i]);
}
SelectSort(arr,10);
printf("-------------------------------\n");
printf("交换后:\n");
for (int i = 0; i < 10; i++)
{
printf("arr[%d]:%d\n", i, arr[i]);
}
}