简单选择排序算法----(排序算法五)
1.算法原理
找到数组中最小的元素与已好数组的最后一位元素交换位置
49 38 65 97 76 13 27 49
i=0 最小为13,交换49与13得[13] 38 65 97 76 [49] 27 49
i=1 最小为27,交换38与27得13 [27] 65 97 76 49 [38] 49
i=2 最小为38,交换65与38得13 27 [38] 97 76 49 [65] 49
i=3 最小为49,交换97与49得13 27 38 [49] 76 [97] 65 49
i=4 最小为49,交换76与79得13 27 38 49 [49] 97 65 [76]
i=5 最小为65,交换97与65得13 27 38 49 49 [65] [97] 76
i=6 最小为76,交换97与76得13 27 38 49 49 65 [76] [97]
排序结束
2.代码实现
#include <stdio.h>
//printArray打印出数组
void printArray(int a[],int size){
printf("数组为:[%d] ",a[0]);
for (int i=1;i<size;i++)
{
printf(" %d ",a[i]);
}
printf("\n");
}
//最出a[]中从start到end元素中的最小值的下标
int minIndex(int a[],int start,int end){
int minIndex=start;
for(int i=start+1;i<=end;i++){
a[i]<a[minIndex]?minIndex=i:0;
}
return minIndex;
}
void main()
{
//a[0]为监视哨
int a[9]={0,49,38,65,97,76,13,27,49};
int n=8;
for (int i=1;i<=n-1;i++)
{
int index=minIndex(a,i,n);
printf("最小a[%d]=%d ",index,a[index]);
printArray(a,9);
a[0]=a[index];
a[index]=a[i];
a[i]=a[0];
}
printArray(a,9);
}
3.排序结果
最小a[6]=13 数组为:[0] 49 38 65 97 76 13 27 49 最小a[7]=27 数组为:[13] 13 38 65 97 76 49 27 49 最小a[7]=38 数组为:[27] 13 27 65 97 76 49 38 49 最小a[6]=49 数组为:[38] 13 27 38 97 76 49 65 49 最小a[8]=49 数组为:[49] 13 27 38 49 76 97 65 49 最小a[7]=65 数组为:[49] 13 27 38 49 49 97 65 76 最小a[8]=76 数组为:[65] 13 27 38 49 49 65 97 76 数组为:[76] 13 27 38 49 49 65 76 97
浙公网安备 33010602011771号