选择排序

来源:互联网 发布:mac如何修改ppt格式 编辑:程序博客网 时间:2024/05/22 10:33

这次学习一下选择排序。
首先先从待排序序列中选择一个最小的放在第一个位置,然后再从余下的序列中选择一个次小的放在第二个位置。然后重复的选择下去,直到所有元素排完。
假设有一个序列a【5】={2,1,0,6,4}
我们可以假设最小的值就在a【0】处,这样我们就从a【1…4】中一次从左到右的与假设的最小值比较,如果比假设的值小,那么最小值得下标就更改,最值也更改,直到找到最小值,然后与a【0】交换。

开始:
{【2】,1,0,6,4} 此时下标min = 0;最小值minval =A【0】;

接着在a【1…4】中找比minval小的元素
{2,【1】,0,6,4}此时找到min=1,minval=A【1】;

继续在a【2…4】中找比minval小的元素
{2,1,【0】,6,4} 此时找到min=2,minval=A【2】;

最后继续在a【3..4】中查找,没有比minval更小的元素了,此时第一次查找结束
交换a【2】 与A【0】

这时的序列是这样子:
a【5】={【0】,1,2,6,4}

这是自己写的一段测试代码:

#include<stdio.h>void select_sort(int A[],int size);//函数声明int main(){    int a[13]={3,2,4,0,1,9,6,12,5,7,34,22,11};//初始序列    select_sort(a,13);//调用选择排序函数    int j=0;    while(j<13)//输出排好序的数组    {        printf("%d\n",a[j]);        j++;    }    return 0;}void select_sort(int A[],int size)//选择排序{    int i,j;    for(i = 0;i<size-1;i++)//这里直到size-1就可以了,因为前size-1个排好了,最后一个就在正确位置    {               int min = i;//假设的初始最小值下标 min=i               int minval = A[i];//假设的初始最小值minval为A【i】                     for(j = i+1;j<size;j++)//在余下的序列A【i+1...size】中选择最小值        {               if(A[j]<minval)//如果A【j】小于minval            {            min = j;//更改最小值下标            minval=A[j];//更改最小值            }        }            int temp;            temp = A[i];            A[i]=A[min];            A[min]=temp;    //交换找到的最小值与初始假设的最小值的位置}}
0 0
原创粉丝点击