数据结构排序问题_2

来源:互联网 发布:mac杀毒软件知乎 编辑:程序博客网 时间:2024/06/05 01:55

这里想总结的是简单选择排序法


假设输入的是有n个整形元素的数组;

基本思想先定好位置,再找元素
1. 从第一个元素开始,第一次遍历找到最小元素的位置,如果最小的元素就是第一个元素,则不操作,若最小的元素不是第一个元素,则与第一个元素进行交换。这样一来,第一个元素就是所有元素的最小值了。
2. 接下来从第二个元素开始进行新一轮的遍历,若此轮最小的元素是第二个元素则不操作,若不是,则与第二个元素进行交换。
…..同理依次进行。
3.最后所有元素就按照从小到大的顺序排列好了,输出即可。


代码实现:

/*             选择排序法                      */#include<stdio.h>void Selection_sort(int a[], int n);int main(){    int a[10]={13,56,87,45,67,4,26,90,74,38};        //初始化数组    Selection_sort(a,10);              //实现选择排序,并输出有序数组    return 0;}void Selection_sort(int a[],int n){    int i,j,index,temp,min;                 //temp作为交换时的中间变量,index记录每次遍历的最小元素的位置    for(i=0;i<n-1;i++)          //总共遍历n-1次    {        index=i,min=a[i];            //遍历前将第i个元素视为最小元素        for(j=i+1;j<n;j++)       //两两元素开始比较大小找到最小元素的位置        {            if(a[j]<min)       //所有元素都要和min做比较            {                min=a[j];   //一定要记得更新最小的值                index=j;      //根据大小情况改变index的值            }        }        if(index!=i)         //第i次遍历若最小元素为a[i],则不操作,若不是,则进行交换        {            temp=a[i];            a[i]=a[index];            a[index]=temp;        } /*************经过一次遍历观察结果*****************************/        printf("第%d趟: ",i+1);        for(j=0;j<n;j++)        {            printf("%5d",a[j]);            if(j==n-1)                printf("\n");        }/****************************************************************/    }}

运行结果如图:
这里写图片描述


个人总结:在第一次写完程序后运行发现自己没有定义一个变量min来不断更新最小的值,只是后一个元素和前一个元素进行比较。

end

1 0