选择排序

来源:互联网 发布:c语言界面编程实例 编辑:程序博客网 时间:2024/06/03 16:33

拜读了太阳落雨兄的排序算法文章,受益良多,本文是在他的选择排序一文基础上加上个人理解和算法分析增强。

一、算法描述

选择排序:首先,选出数组中最小的元素,将它与数组中第一个元素进行交换。然后找出次小的元素,并将它与数组中第二个元素进行交换。按照这种方法一直进行下去,直到整个数组排完序。

    0   1   2   3   4   5   6   7   8   9    -------------------------------------    3   55  1   232 11  6   9   8   1   10      selection index:2    1   55  3   232 11  6   9   8   1   10      selection index:8    1   1   3   232 11  6   9   8   55  10      selection index:2    1   1   3   232 11  6   9   8   55  10      selection index:5    1   1   3   6   11  232 9   8   55  10      selection index:7    1   1   3   6   8   232 9   11  55  10      selection index:6    1   1   3   6   8   9   232 11  55  10      selection index:9    1   1   3   6   8   9   10  11  55  232     selection index:7    1   1   3   6   8   9   10  11  55  232     selection index:8    1   1   3   6   8   9   10  11  55  232     done    1   1   3   6   8   9   10  11  55  232

二、算法分析

平均时间复杂度:O(n2)

空间复杂度:O(1) (用于交换和记录索引)

稳定性:不稳定

三、算法实现

#include <stdlib.h>#include <stdio.h>void print(int *pDataArray, int iDataNum);void DataSwap(int* data1, int* data2){    int temp = *data1;    *data1 = *data2;    *data2 = temp;}/******************************************************** * *函数名称:SelectionSort * *参数说明:pDataArray 无序数组; * *           iDataNum为无序数据个数 * *说明:    选择排序 * *********************************************************/void SelectionSort(int* pDataArray, int iDataNum){    int i=0,j=0;    for (i = 0; i < iDataNum - 1; i++)    //从第一个位置开始    {        int index = i;        for (j = i + 1; j < iDataNum; j++)    //寻找最小的数据索引             if (pDataArray[j] < pDataArray[index])            {                   index = j;                printf("%d,",index);            }        if (index != i)    //如果最小数位置变化则交换            DataSwap(&pDataArray[index], &pDataArray[i]);        printf("\nselection index:%d",index);        print(pDataArray, iDataNum);    }}//打印数组void print(int* pDataArray, int iDataNum){    int i=0;    printf("\n");    for(i=0;i<iDataNum;i++)    {        printf("%d  ",pDataArray[i]);    }    printf("\n");}int main(){    int iDataNum = 10;    int pDatas[10] = {3,55,1,232,11,6,9,8,1,10};    printf("init\n");    print(pDatas, iDataNum);    SelectionSort(pDatas, iDataNum);    printf("\ndone\n");    print(pDatas, iDataNum);}

参考文章:http://blog.csdn.net/cjf_iceking/article/details/7914554

0 0
原创粉丝点击