选择排序
来源:互联网 发布: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
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序:
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- unity3D 在屏幕边框创建碰撞框
- 如何降低网站的跳出率?
- 《千与千寻》给读者带来了什么?
- IOS里的多线程编程详解
- 动漫推荐之七大罪
- 选择排序
- 4种kill某个用户所有进程的方法
- java通过ssl连接LDAP服务器(包括LDAP服务器搭建、openssl数字证书生成、openldap服务器配置启动)
- svn add 命令 递归目录下所有文件
- js判断是否为IE浏览器
- VC++2010断点无法设置问题
- 【Android UI设计】ExpandableListView详解
- #leetcode#Next Permuatation
- web.xml 详细介绍