1.选择排序思想 :扫描N次 ,从左到右去扫描,每次找出其中的最大(降序)和最小(升序)的元素,然后去交换位置
2.特点: 不会根据输入序列而影响排序的交换和比较的次数
所以 时间复杂度O(N^2) 最好情况下 O(N^2) 最坏情况下 O(N^2)
3.举例
随机序列 4,2,3,5,1
扫描 1 次 : 找到最小元素 1 然后和 4交换
交换后的序列 1, 2, 3, 5, 4
扫描 2 次 : 找到最小元素 2 2在自己的位置上不用交换
扫描 3次 :找到最小元素3 2在自己的位置上不用交换
扫描 4 次 : 找到最小元素 4 然后和 5交换
扫描 5次 :只有一个元素 在原有位置
4.代码实现:
void selectSort(int a[],int N)
{
if(a == NULL) return ;
int i,j;
//扫描N次
for(i=0;i<N;i++)
{
//找出最小的元素
int min = i;
for(j = i+1;j<N;j++)
{
if(a[min] > a[j])
{
min = j;
}
}
//交换
if(min != i)
{
exchange(a, min, i);
}
}
}