CPrimerPlus第十一章中的“选择排序算法”学习

C Primer Plus第十一章字符串排序程序11.25中,涉及到“选择排序算法”,这也是找工作笔试或面试可能会遇到的题目,下面谈谈自己的理解。

举个例子:对数组num[5]={3,5,2,1,4}中各元素进行从小到大的排序并输出(为了更清楚了解排序过程,要求输出每一轮排序后的结果)。

附上程序(写的有点复杂,主要代码只有几行):

/* 对一个整数数组中的元素从小到大排序 */
/************* 选择排序法 *************/
/********* by行动救赎 2016.9.21********/


#include <stdio.h>
void sort(int *, int);    //数组排序
void prnt(int *, int);    //数组打印

/*****************主函数******************/
int main(void)
{
    int num[5] = {3,5,2,1,4};

    sort(num, 5);

    return 0;
}

/*****************排序函数******************/
void sort(int * num, int n)
{
    int i, temp;
    int top, seek;

    printf("
第%d次结果:", 0); 
    prnt(num, n);
    for (top=0; top<n-1; top++)
    {
        for(seek=top+1; seek<n; seek++)
        {
            if(num[top] > num[seek])
            {temp=num[top]; num[top]=num[seek]; num[seek]=temp;}
            prnt(num, n);
        }
        printf("
第%d次结果:", top+1);
        prnt(num, n);
    }
}

/*****************打印数组******************/
void prnt(int * num, int n)
{
    int i;
    for(i=0; i<n; i++)
        printf("%d ", *(num+i));
    printf("
");
}

1.第一个数和剩下的n-1个数依次比较,遇到比第一个数小的数,就将该数和第一个数交换:3和5比,3<5,不用交换,35214;3和2比,3>2,交换,25314;2和1比,2>1,交换,15324;1和4比较,1<4,不换,15324。

2.第二个数和剩下的n-2个数依次比较,遇到比第二个数小的数,就将该数和第二个数交换:5<3?,换,13524;3<2?换,12534;2<4?不换,12534。

3.第三个数和剩下的n-3个数依次比较,遇到比第三个数小的数,就将该数和第三个数交换:5<3?,换,12354;3<4?不换,12354。

4.第四个数和剩下的n-4个数依次比较,遇到比第四个数小的数,就将该数和第四个数交换:5<4?,换,12345。

下面是核心思路的代码:

for (top=0; top<n-1; top++)
    {
        for(seek=top+1; seek<n; seek++)
            if(num[top] > num[seek])
            {temp=num[top]; num[top]=num[seek]; num[seek]=temp;}
    }

一点浅薄的探究,和大家分享一下。

原文地址:https://www.cnblogs.com/TomLily/p/5891728.html