基本思想
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
- 选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面,或者将最大值放在最后面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择,每一趟从前往后查找出无序区最小值,将最小值交换至无序区最前面的位置。
代码实现
c版本
#include<stdio.h>
int main()
{
int i,n;
int a[100];
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
SelectionSort(a,n);
for(i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d",a[n]);
return 0;
}
void SelectionSort(int k[],int n)
{
int i,j,flag;
int temp;
for(i=1;i<=n-1;i++)
{
flag=i;
for(j=i+1;j<=n;j++)
if(k[j]<k[flag])
flag=j;
if(flag!=i)
{
temp=k[flag];
k[flag]=k[i];
k[i]=temp;
}
}
}
c++版本
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{
void SelectionSort(int k[],int n);
int i,n;
int a[100];
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
SelectionSort(a,n);
for(i=1;i<n;i++)
cout<<a[i]<<" ";
cout<<a[i]<<endl;
return 0;
}
void SelectionSort(int k[],int n)
{
int i,j,flag;
int temp;
for(i=1;i<=n-1;i++)
{
flag=i;
for(j=i+1;j<=n;j++)
if(k[j]<k[flag])
flag=j;
if(flag!=i)
swap(k[flag],k[i]);
}
}