选择排序
2015-06-15 17:57
232 查看
拜读了太阳落雨兄的排序算法文章,受益良多,本文是在他的选择排序一文基础上加上个人理解和算法分析增强。
空间复杂度:O(1) (用于交换和记录索引)
稳定性:不稳定
参考文章:/article/2701788.html
一、算法描述
选择排序:首先,选出数组中最小的元素,将它与数组中第一个元素进行交换。然后找出次小的元素,并将它与数组中第二个元素进行交换。按照这种方法一直进行下去,直到整个数组排完序。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
相关文章推荐
- UIAppearance
- 使用android-resource-remover优化资源使用率和lint-result.xml如果导出
- Why you should use async tasks in .NET 4.5 and Entity Framework 6
- 如何降低网站的跳出率?
- 《千与千寻》给读者带来了什么?
- C语言发发展历史
- QPS、PV和需要部署机器数量计算公式(转)
- sqlite3自增key设定(创建自增字段)
- linux下,PHP操作redis及redis、php-redis的安装
- Java 在Eclipse中的操作技巧
- 算法:两种方式(递归/循环)实现二分查找
- java.lang.NoClassDefFoundError: com.baidu.mapapi.SDKInitializer(解决方法)
- Linux 有问必答:如何在桌面版 Ubuntu 中安装 Unity Tweak Tool
- Linux时间戳和标准时间的互转
- mysql 配置向导
- unity3D 在屏幕边框创建碰撞框
- Oracle连接问题
- OC4_电子词典
- jQuery开发之DOM操作一
- JS分页