数据结构(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中。