1、简单排序算法就是通过n-i次关键字的比较,从中选择最小的记录,与交换到第一的位置。
首先需要一个min来记录所找到的最小下标,min初值为0,当data[min]大于data[j]时,说明min所指向的元素并不是最小的,所以min值重新赋值j,直到找到最小的值;再第二轮循环中,第一个最小值已经找到,需要寻找次小值,所以min此时为1,继续寻找,知道表中元素变得有序。
简单选择排序的时间复杂度为,但在性能上还是略优于冒泡排序。
2、简单选择排序实现算法:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct
{
int data[100];
int length;
}SqList;
void Out(SqList *L)
{
int i;
for (i = 0; i < L->length; i++)
{
printf("%d ", L->data[i]);
}
}
void Insert(SqList *L)
{
int size,i;
printf("输入线性表的元素个数:");
scanf_s("%d", &size);
L->length = size;
printf("\n输入%d个数字", size);
for (i = 0; i < L->length; i++)
{
scanf_s("%d", &L->data[i]);
}
printf("表中的元素为:");
Out(L);
printf("\n");
}
void SelectSort(SqList *L)
{
int i, j, min;
for (i = 0; i < L->length; i++)
{
min = i;
for (j = i+1; j < L->length; j++)
{
if (L->data[min] > L->data[j])
min = j;
}
if (i != min)
swap(L->data[i], L->data[min]);
}
}
int main()
{
SqList L;
Insert(&L);
SelectSort(&L);
printf("简单选择排序之后的序列为:");
Out(&L);
}