八大排序算法之简单选择排序

来源:互联网 发布:java错误等级 编辑:程序博客网 时间:2024/05/01 12:55

基本排序思想:: 在要排序的一组数中,选出最大(或者最小)的一个数与第一个位置的数字进行交换;然后在剩下的一组数中再找最大(或者最小)的与第二个位置进行交换,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止,排序完成!


具体步骤见代码中注释

#include<stdio.h>//选择一个最大值出来int MaxKey(int a[], int m, int n){    int k;    k= m;                       //k指向这段数组的第一个元素    for(int i= m+1; i<n; ++i){  //i从第二个元素开始遍历到n        if(a[i]>a[k])           //如果这个元素比k指向的元素要大            k= i;               //那么让k指向这个较大的    }    return k;}void SelectSort(int a[], int n){    int key,tmp;    for(int i= 0; i<n; i++){        key= MaxKey(a,i,n); //返回最大值的元素序号        if(key!= i)     //如果key指向最大元素值不是i的话,交换key和i的位置            a[i]^=a[key]^=a[i]^=a[key];//交换    }}int main(void){    int a[10];    int n= 10;    printf("\t请输入10个数字\n");    for(int i= 0; i<10; i++)        scanf("%d",&a[i]);    SelectSort(a,n);    for(int j= 0; j<n; j++)        printf("%3d ",a[j]);    printf("\n");    return 0;}
1 0