选择排序也是一种比较常见的排序方法。
它的基本思想是:
第i趟排序从序列的n-i+1(i=1,2,,,,n-1)个元素中选择一个最小的元素,与该n-i+1个元素的最前面的那个元素进行位置交换,也就是与第i个位置上的元素进行交换,直到i=n-1。
直观地讲,每一趟的选择排序就是从序列中未排好顺序的元素中选择一个最小的元素,将该元素与这些未排好顺序的元素的第一个元素交换位置。
下面通一个例子来介绍选择排序的执行过程。
数据元素序列{3, 6, 4, 2, 11, 10, 6}
第一趟:{(2), 6, 4, 3, 11, 10, 6}
第二趟:{(2, 3), 4, 6, 11, 10, 6}
第三趟:{(2, 3, 4), 6, 11, 10, 6}
.......
选择排序算法描述:
void selectsort(keytype k[], int n)
{
int i,j,min;
keytype temp;
for(i=0; i<n-1; i++)
{
min = i;
for(j = i+1; j<n; j++)
if(k[j] < k[min])
min=j;
if(min != i)
{
temp = k[min];
k[min] = k[i];
k[i] = temp;
}
}
}
实例:
#include <stdio.h>
#include <stdlib.h>
void selectsort(int a[], int n)
{
int i, j, max;
for(i=0; i<n-1; i++)
{
max = i;
for(j=i+1; j<n; j++)
{
if(a[j] > a[max])
{
max = j;
}
}
if(max != i)
{
int temp = a[max];
a[max] = a[i];
a[i] = temp;
}
}
}
void main
{
int i;
int a[10] = {2, 5, 6, 3, 7, 8, 0, 9, 12, 1};
printf("The orginal data array is\n");
for(i = 0; i <10; i++)
{
printf("%d ",a[i]);
}
selectsort(a, 10);
printf("\nThe result of insertion sorting for the arrray is\n");
for(i = 0; i<10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
system("pause");
}