您的位置:首页 > 其它

选择排序

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

一、算法描述

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

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);
}


参考文章:/article/2701788.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: