数据结构(C语言版)——简单选择排序(代码版)

一、代码

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 20
#define ERROR 0
#define OK 1 
typedef int Status;
void selectSort(int data[]);

int main(int argc, char *argv[]) {
          
   
	int data[MAXSIZE],i,arrSize;
	printf("请输入待排序的数组大小:");
	if(scanf("%d",&arrSize)==0)
	{
          
   
		printf("输入有误!
");
		return ERROR;
	}
	printf("请输入待排序数组:");
	data[0]=arrSize;//存储数组长度 
	for(i=1;i<=arrSize;i++)
	{
          
   
		scanf("%d",&data[i]);
	}
	printf("开始简单选择排序
");
	selectSort(data);
	printf("排序结果为:");
	for(i=1;i<=arrSize;i++)
	{
          
   
		printf("%5d",data[i]);
	} 
	return 0;
}

void selectSort(int data[])
{
          
   
	int i,j,min;
	for(i=1;i<data[0];i++)
	{
          
   
		min=i;
		for(j=i+1;j<=data[0];j++)
		{
          
   //循环比较找出最小的位置 
			if(data[min]>data[j])
				min=j;
		}
		if(i!=min)
		{
          
   //交换位置 
			int mid;
			mid=data[i];
			data[i]=data[min];
			data[min]=mid;
		}
	}
}

二、算法解释

案例:对21 25 49 26 16 08使用简单选择排序进行排序 原始序列:21 25 49 26 16 08 第一步:找到最小值08 与序列中第一个位置进行交换 08 25 49 26 16 21 第二步:接着在25 49 26 16 21 中找到最小值和第二个位置交换 08 16 49 26 25 21 现在前两个位置已经排好了 第三步:重复上面的操作 08 16 21 26 25 49 第四步:08 16 21 25 26 49 第五步:08 16 21 25 26 49 现在已经排序好了,一共循环6次,也就是说n个数的数列循环n-1次

三、代码中重要的函数或语句

void selectSort(int data[])
{
          
   
	int i,j,min;
	for(i=1;i<data[0];i++)
	{
          
   
		min=i;
		for(j=i+1;j<=data[0];j++)
		{
          
   //循环比较找出最小的位置 
			if(data[min]>data[j])
				min=j;
		}
		if(i!=min)
		{
          
   //交换位置 
			int mid;
			mid=data[i];
			data[i]=data[min];
			data[min]=mid;
		}
	}
}

上面代码是简单选择排序的核心,其中

if(i!=min)
		{
          
   //交换位置 
			int mid;
			mid=data[i];
			data[i]=data[min];
			data[min]=mid;
		}

上面代码是进行交换位置

第一层循环

for(i=1;i<data[0];i++)

是循环n-1次,这一点需要注意。 再者需要注意的地方就是下面代码

min=i;
		for(j=i+1;j<=data[0];j++)
		{
          
   //循环比较找出最小的位置 
			if(data[min]>data[j])
				min=j;
		}

上面代码就是寻找最小值的位置,并存放在min中。

经验分享 程序员 微信小程序 职场和发展