简单选择排序——C语言实现
选择排序思想:若按照递增顺序对顺序表进行排列,在n个元素的顺序表中,从第i(i=1)个元素开始遍历到第n-1个元素,在遍历过程中都将第i个元素依次与第i+1到第n个元素进行比较,确定最小的元素,如果最小的元素不是第i个元素则将其与最小的元素进行交换。
代码如下:
#include<stdio.h> void select_sort(int a[],int n){ int i,j,min,temp=0; //变量i,j用来遍历数组,min用来标记最小值的位置,temp用于交换两个变量的值 for(i=0;i<n-1;i++){ //从第1个元素开始遍历到第n-1个元素 min=i; //每一轮遍历都先将i的值赋给min,默认a[i]是最小元素 for(j=i+1;j<n;j++){ //从第i+1开始遍历,并逐一与a[i]进行比较 if(a[min]>a[j]) //若a[min]>a[j]则将j的值赋给min,用来记录当前最小元素的位置 min=j; } if(min!=i){ //当a[i]与待比较的元素比较完后,若min的位置与i不一致 temp=a[i]; //那么就将最小的元素a[min]与a[i]进行交换 a[i]=a[min]; a[min]=temp; } } } int main(){ int a[]={6,2,1,3,4,5}; //初始化数组 int len=sizeof(a)/sizeof(a[0]); //用变量len接收数组长度计算出来 printf("排序前的数组: "); for(int i=0;i<len;i++) //遍历排序前的数组 printf("%d ",a[i]); printf(" "); select_sort(a,len); //使用选择排序算法 printf("排序后的数组: "); for(int i=0;i<len;i++) //遍历排序后的数组 printf("%d ",a[i]); return 0; }
运行结果: