简单选择排序的基本思想:每一趟选出关键字最小的元素与L(i)交换,每一趟排序可以确定一个元素的最终位置,经过n-1趟排序即可整个有序。
时间复杂度:O(n²)
稳定性:不稳定
下面投放简单选择排序的代码
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MaxSize 50
typedef struct{
int data[MaxSize];
int length;
}SeqList;
//创建顺序表
void createTable(SeqList &L){
L.length=5; //用循环方法初始化时,千万要记得给length赋初值
L.data[0] = 3;
L.data[1] = 1;
L.data[2] = 4;
L.data[3] = 2;
L.data[4] = 5;
}
//简单选择排序
void SelectSort(SeqList &L,int n){
//对L作简单选择排序,L从0开始存放元素
int i,j,temp,min;
for(i = 0;i<n-1;i++){ //一共进行n-1趟排序
min = i; //记录最小元素位置
for(j = i+1; j<n ;j++){ //在L中选择最小的元素
if(L.data[j]<L.data[min])
min = j; //更新最小元素位置
}
if(min!=i){ //与第i个位置交换
temp = L.data[i];
L.data[i] = L.data[min];
L.data[min] = temp;
}
}
}
//输出顺序表
void printTable(SeqList L){
int i;
for(i = 0;i<L.length;i++){
printf("%d\t",L.data[i]);
}
printf("\n");
}
int main(){
SeqList L; //创建表
createTable(L);
printf("排序前的列表为:\n");
printTable(L); //打印表
SelectSort(L,5); //简单选择排序算法
printf("排序后的列表为:\n");
printTable(L); //打印排序后的
return 0;
}