前提条件
- 熟悉C语言与指针
- 熟悉数据结构与算法
简介
简单选择排序是一种简单但不稳定的排序算法。
- 最好情况下,即待排序记录初始状态就已经是升序排列了,则不需要移动记录。
- 最坏情况下,即待排序记录初始状态是按第一条记录最大,之后的记录从大到小顺序排列,则需要移动记录的次数最多为 3 ( n − 1 ) 3(n-1) 3(n−1)。
- 简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。
- 当 i = 1 i=1 i=1时,需进行 n − 1 n-1 n−1次比较;当 i = 2 i=2 i=2时,需进行 n − 2 n-2 n−2次比较;依次类推,共需要进行的比较次数是 ( n − 1 ) + ( n − 2 ) + … + 2 + 1 = n ( n − 1 ) / 2 (n-1)+(n-2)+…+2+1=n(n-1)/2 (n−1)+(n−2)+…+2+1=n(n−1)/2,即进行比较操作的时间复杂度为O( n 2 n^2 n2),进行移动操作的时间复杂度为O(n)。
- 简单选择排序是不稳定排序。
- 简单选择排序算法原理:**每次从左至右扫描序列,记下最小值的位置。**比如对序列{4,6,5,1,3,2}简单选择排序,如下图所示。
简单选择排序算法
void selectSort(int data[],int n)
/*简单选择排序*/
{
int i,j,k;
int temp;
for ( i = 0; i < n-1; i++){
k=i;//用于储存最小元素的下标
for ( j = i+1; j < n; j++)/*找出最小元素的下标*/
{
if(data[j]<data[k])
k=j;
}
if(k!=i)
{
temp=data[i];
data[i]=data[k];
data[k]=temp;
}
}
}
完整代码
#include<stdio.h>
#include<stdlib.h>
void selectSort(int data[],int n)
/*简单选择排序*/
{
int i,j,k;
int temp;
for ( i = 0; i < n-1; i++){
k=i;//用于储存最小元素的下标
for ( j = i+1; j < n; j++)/*找出最小元素的下标*/
{
if(data[j]<data[k])
k=j;
}
if(k!=i)
{
temp=data[i];
data[i]=data[k];
data[k]=temp;
}
}
}
int main(){
int data[6]={4,6,5,1,3,2};
selectSort(data,6);
printf("the result of the selectSort:\n");
for (int i = 0; i < 6; i++)
{
printf("%d ",data[i]);
}
printf("\n");
system("pause");
return 0;
}
输出结果

本文介绍简单选择排序算法,包括其工作原理、时间复杂度及稳定性分析,并提供完整的C语言实现代码示例。


527

被折叠的 条评论
为什么被折叠?



