算法思想
选择类排序的主要动作是“选择”,简单选择排序采用最简单的选择方式,从头至尾顺序扫描序列,找出最小的一个关键字,和第一个关键字交换,接着从剩下的关键字中继续这种选择和交换,最终使序列有序。
执行流程
代码
核心代码:
/* 简单选择排序 */
/* R[]指的是待排序的数组;n指的是数组长度 */
void selectSort(int R[],int n){
for(int i=0;i<n;i++){// 循环遍历数组中的所有数
int k=i;// 用来保存最小值的下标
int min=R[i];// 以R[i]为最小值的基准
for(int j=i;j<n;j++){// 查找数组序列的最小值
if(R[j]<min){
min=R[j];
k=j;// 返回最小值所在的下标
}
}
/* 交换R[i]与最小值 */
int temp=R[i];
R[i]=R[k];
R[k]=temp;
}
}
完整代码:
#include<stdio.h>
/* 打印数组元素 */
void print(int nums[],int n) {
printf("\n");
for(int i=0; i<n; i++) {
printf("%d\t",nums[i]);
}
printf("\n");
}
/* 简单选择排序 */
/* R[]指的是待排序的数组;n指的是数组长度 */
void selectSort(int R[],int n){
for(int i=0;i<n;i++){// 循环遍历数组中的所有数
int k=i;// 用来保存最小值的下标
int min=R[i];// 以R[i]为最小值的基准
for(int j=i;j<n;j++){// 查找数组序列的最小值
if(R[j]<min){
min=R[j];
k=j;// 返回最小值所在的下标
}
}
/* 交换R[i]与最小值 */
int temp=R[i];
R[i]=R[k];
R[k]=temp;
}
}
int main() {
int nums[]= {49,38,65,97,76,13,27,49};
int n=8;// nums数组的长度
printf("排序前:");
print(nums,n);
selectSort(nums,n);// 进行简单选择排序
printf("排序后:");
print(nums,n);
return 0;
}
运行结果: