三种基本排序算法-冒泡排序,选择排序,插入排序
2016-01-05 22:51
537 查看
在实际应用开发中,我们经常需要用到排序算法进行数据的排序,而冒泡排序,选择排序,插入排序这三种排序算法则是比较容易理解并上手的算法。
冒泡排序基本思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。
冒泡排序算法代码及注释如下:
选择排序基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
选择排序算法代码及注释如下:
插入排序基本思想:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。
插入排序算法代码及注释如下:
冒泡排序基本思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。
冒泡排序算法代码及注释如下:
void BubbleSort(int src[], int len) //冒泡排序函数接口,src为输入数组,len为数组长度 { int i, j; bool flag = true; //定义标识符,表示是否有数据交换 for (i = 0; i < len && flag==true; i++) //当有数据交换且数组还没遍历完的时候进行遍历 { flag = false; //将标识符置为false,表示如果后续元素没有交换,则不再进行遍历 /*len-2表示倒数第二个元素*/ for (j = len-2; j >= i; j--) //从最后元素往回遍历比较,在这里因为数组长度为len,元素下标为0~len-1,所以我写成了len-2 { if (src[j] > src[j+1]) //在这里表示当前元素与后一个元素比较,如果后一个元素比较小,则交换位置 { swap(src[j], src[j+1]); flag = true; //表示有数据交换,所以继续遍历比较,将flag置为true } } } }
选择排序基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
选择排序算法代码及注释如下:
void SelectSort(int src[], int len) //选择排序函数接口,src为输入数组,len为数组长度 { int i,j,min; for (i = 0; i < len; i++) { min = i; //将需要交换元素的位置置为当前下标 for (j = i + 1; j < len; j++) //向后遍历选出数组后续元素中最小的元素,并将其下标赋给min { if (src[j] < src[min]) min = j; } if (i != min) //进行下标判断,避免多余的交换 { swap(src[i], src[min]); } } }
插入排序基本思想:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。
插入排序算法代码及注释如下:
void InsertSort(int src[], int len) //插入排序函数接口,src为输入数组,len为数组长度 { int i, j, temp; for (i = 1; i < len; i++) //从第2个元素开始遍历 { if (src[i] < src[i - 1]) //如果后一个元素比前一个元素小,则进行插入操作 { temp = src[i]; //先把当前元素存放在临时变量里 for (j = i - 1; src[j] > temp; j--)//然后逐步向前比较,将比当前元素小的值后移 { src[j + 1] = src[j]; } src[j + 1] = temp; //完成插入 } } }
相关文章推荐
- JavaScript演示排序算法
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#数据结构之顺序表(SeqList)实例详解
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 数据结构之Treap详解
- 浅析STL中的常用算法