简单选择排序属于选择排序中最为读者熟悉的排序,稍微复杂的还有树形选择排序、堆排序。它的基本思想和冒泡排序颇为相似,比较n-1轮,每轮找到最大或者最小的数,但区别在于,找到后并不立即交换,只是记录下位置。待本轮比较结束后再交换,平均情况下比冒泡排序少了许多记录移动。总的时间复杂度也是O(n^2)。
一般排序都是递增的,所以我们每次轮就找到最大的记录,将其与后面的记录进行交换。完成排序。
//
// 简单选择排序
//
// Created by GPH on 13-6-9.
// Copyright (c) 2013年 GPH. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
//完成排序后,数组非递减
void selectSort(int a[],int n);
void selectSort(int a[],int n)
{
int max = 0;
int pos = 0;
for (int i = 0; i < n-1; i++)
{
max = a[0];
pos = 0;
//每次选择最大的放到最后
for (int j = 1; j < n-i; j++)
{
if (a[j] > max)
{
//记录大值及位置
max = a[j];
pos = j;
}
}
//进行交换
max = a[n-i-1];
a[n-i-1] = a[pos];
a[pos] = max;
}
}
int main()
{
int a[]={49, 38, 65, 97, 76, 13, 27, 49};
selectSort(a, sizeof(a)/sizeof(a[0]));
for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
{
printf("%d ",a[i]);
}
}