选择排序
基本思想:
1.第一次从全部数据元素扫描中选出最小(或最大)的一个元素,存放在序列的起始位置(第一个位置),
2.再从第二个的元素开始向后扫描寻找到最小(大)元素,然后放到已排序的序列的第二个位置。 以此类推,直到全部待排序的数据元素的个数为零。
图解:
操作方法:
1.假设第一个位置的元素是最小的设为min,for循环向后扫描一旦发现比min小的元素则把min的值换成比它小的元素值,并记下最小元素的值与坐标。
2.一趟循环结束,交换第一个位置元素的值和序列中最小值元素所在位置的值。
#include<stdio.h>
void swap(int *p1,int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
void selection_sort(int data[],int n)
{
int i,j;
int minpos;
int min;
for(i=0;i<n;i++)
{
min=data[i];//.假设第一个位置的元素是最小的设为min
for(j=i+1;j<n;j++)
{
if(data[j]<min)//一旦发现比min小的元素则把min的值换成比它小的元素值
{
minpos=j;//记下最小元素的值与坐标
min=data[j];
}
}
swap(&data[i],&data[minpos]);//交换第一个位置元素的值和序列中最小值元素所在位置的值
}
}
int main()
{
int data[10];
for(int i=0;i<10;i++)
{
scanf("%d",&data[i]);
}
//bubble_sort(data,10);
//insert_sort(data,10);
//shell_sort(data,10);
selection_sort( data,10);
for(int i=0;i<10;i++)
{
printf("%d ",data[i]);
}
return 0;
}