各种排序算法思想
2016-03-21 13:05
218 查看
1. 冒泡排序
对1,5,3,4,2,9,6,8,7进行从小到大排序。
第1轮
8和7进行比较,8>7 位置交换 153429678
6和7进行比较,6<7 位置不变 153428678
9和6进行比较,9>6 位置交换 153426978
2和6进行比较,2<6 位置不变 153426978
4和2进行比较,4>2 位置交换 153246978
3和2进行比较,3>2 位置交换 152346978
5和2进行比较,5>2 位置交换 125346978
1和2进行比较,1<2 位置不变 125346978
第2轮
7和8进行比较,7<8 位置不变 125346978
9和7进行比较,9>7 位置交换 125346798
6和7进行比较,6<7 位置不变 125346798
4和6进行比较,4<6 位置不变 125346798
3和4进行比较,3<4 位置不变 125346798
5和3进行比较,5>3 位置交换 123546798
2和3进行比较,2<3 位置不变 123546798
第3轮
…
code
2. 归并排序
对5,1,3,4,2,9,8,7进行从小到大排序。
拆分
5134 2987
拆分
51 34 29 87
排序
15 34 29 78
15 34的1和3比较取出1
5 34的5和3比较取出3
5 4的5和4进行比较取出4
…
3. 选择排序
以5个无序的数据为例:56 12 80 91 20
第1轮
12和56比较,12<56 最小值索引为1
80和12比较,80>12 最小值索引为1
91和12比较,91>12 最小值索引为1
20和12比较,20>12 最小值索引为1
56和最小索引值交换顺序
第2轮
80和56比较,80>56 最小值索引为1
91和56比较,91>56 最小值索引为1
20和56比较,20<56 最小值索引为4
56和21最小索引值交换顺序
…
code
4. 插入排序
以5个无序的数据为例:65 27 59 64 58
第1轮
65和27比较 交换顺序 27 65 59 64 58
第2轮
65和59比较 交换顺序 27 59 65 64 58
27和59比较 位置不变 27 59 65 64 58
第三轮
…
code
对1,5,3,4,2,9,6,8,7进行从小到大排序。
第1轮
8和7进行比较,8>7 位置交换 153429678
6和7进行比较,6<7 位置不变 153428678
9和6进行比较,9>6 位置交换 153426978
2和6进行比较,2<6 位置不变 153426978
4和2进行比较,4>2 位置交换 153246978
3和2进行比较,3>2 位置交换 152346978
5和2进行比较,5>2 位置交换 125346978
1和2进行比较,1<2 位置不变 125346978
第2轮
7和8进行比较,7<8 位置不变 125346978
9和7进行比较,9>7 位置交换 125346798
6和7进行比较,6<7 位置不变 125346798
4和6进行比较,4<6 位置不变 125346798
3和4进行比较,3<4 位置不变 125346798
5和3进行比较,5>3 位置交换 123546798
2和3进行比较,2<3 位置不变 123546798
第3轮
…
code
for(j=0;j<N;j++) { for(k=N-1;k>j;k--) { if(value_buffer[k]<value_buffer[k-1]) { temp = value_buffer[k]; value_buffer[k] = value_buffer[k-1]; value_buffer[k-1] = temp; } } }
2. 归并排序
对5,1,3,4,2,9,8,7进行从小到大排序。
拆分
5134 2987
拆分
51 34 29 87
排序
15 34 29 78
15 34的1和3比较取出1
5 34的5和3比较取出3
5 4的5和4进行比较取出4
…
3. 选择排序
以5个无序的数据为例:56 12 80 91 20
第1轮
12和56比较,12<56 最小值索引为1
80和12比较,80>12 最小值索引为1
91和12比较,91>12 最小值索引为1
20和12比较,20>12 最小值索引为1
56和最小索引值交换顺序
第2轮
80和56比较,80>56 最小值索引为1
91和56比较,91>56 最小值索引为1
20和56比较,20<56 最小值索引为4
56和21最小索引值交换顺序
…
code
void SelectionSort(int* pDataArray, int iDataNum) { for (int i = 0; i < iDataNum - 1; i++) //从第一个位置开始 { int index = i; for (int j = i + 1; j < iDataNum; j++) //寻找最小的数据索引 if (pDataArray[j] < pDataArray[index]) index = j; if (index != i) //如果最小数位置变化则交换 DataSwap(&pDataArray[index], &pDataArray[i]); } }
4. 插入排序
以5个无序的数据为例:65 27 59 64 58
第1轮
65和27比较 交换顺序 27 65 59 64 58
第2轮
65和59比较 交换顺序 27 59 65 64 58
27和59比较 位置不变 27 59 65 64 58
第三轮
…
code
/******************************************************** *函数名称:InsertSort *参数说明:pDataArray 无序数组; * iDataNum为无序数据个数 *说明: 插入排序 *********************************************************/ void InsertSort(int* pDataArray, int iDataNum) { for (int i = 1; i < iDataNum; i++) //从第2个数据开始插入 { int j = i - 1; int temp = pDataArray[i]; //记录要插入的数据 while (j >= 0 && pDataArray[j] > temp) //从后向前,找到比其小的数的位置 { pDataArray[j+1] = pDataArray[j]; //向后挪动 j--; } if (j != i - 1) //存在比其小的数 pDataArray[j+1] = temp; } }
相关文章推荐
- JSON 和 XML优缺点的比较
- 深入理解Java之《突破程序员基本功》之面向对象 ---------读书笔记------持续更新
- LINUX chmod 文件安全与权限
- 经典 算法整理之希尔排序
- 蓝牙Bluetooth(BLE)
- 加密算法
- 关公战秦琼:互联网招聘公司为何杠上食品企业?
- ccf 无线网络
- 数组 最大值,课堂测试
- [bzoj2428] [HAOI2006]均分数据
- 【源代码】信息熵法算权重
- #006 dependencies和devDependencies的区别
- 【源代码】《关于敏捷性评价指标权重的研究》
- 2016 JavaScript 技术栈展望
- squares id:201
- docker 基于现有镜像修改后保存,上传私有仓库
- Java中的初始化
- docker 基于现有镜像修改后保存,上传私有仓库
- 最流行的android组件大全
- 谷歌将更新移动友好度算法了