选择排序:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
思路分析:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define DATASIZE 10
/********************选择排序*******************************************
基本思想:每一趟从待排序的记录中选出关键字最小的记录,
按顺序放在已排序的记录序列的最后,直到排完为止。
思路分析:通过循环找到元素中最小的元素,然后把其放在开头,即与开头元素交换
位置,接着从随后元素中找到最小的元素,然后放在开头元素的
后面,即与第二个元素交换位置,接着重复上述操作直到进行到最后一个元素。
* *********************************************************************/
void SelectSort(int arr[])
{
int i,j;
int min;
int temp;
for(i = 0;i < DATASIZE; i++){
min = i;
for(j = i + 1; j < DATASIZE; j++){
if(arr[j] < arr[min]) min = j; //存储最小元素的下标
}
//找到最小元素后,实现位置的互换,实际上是数据的交换
temp = arr[i]; //备份前面的元素
arr[i] = arr[min];//把最小的元素放在前面
arr[min] = temp;//把前面的元素放在找到的最小元素的位置
}
}
int main()
{
srand(time(NULL));
int arr[DATASIZE];
printf("未排序之前的数列:");
for (int i = 0; i < DATASIZE; i++)
{
arr[i] = rand()%100;
printf("%-2d ",arr[i]);
}
printf("\n");
SelectSort(arr);
printf("已排序之后的数列:");
for (int i = 0; i < DATASIZE; i++)
{
printf("%-2d ",arr[i]);
}
printf("\n");
}