排序算法之二-选择排序和插入排序
来源:互联网 发布:编程用什么配置的电脑 编辑:程序博客网 时间:2024/06/01 10:45
二、选择排序
也是一种容易理解的排序,基本思想是,对要排序的在n个元素,每一次都是从待排序的元素中,选出最小(或最大)的一个,按选择顺序,将选择出来的数,顺序放在已排好序的元素序列的最后,直到全部待排序的数据元素排完。
下面以以下面数据为例,将其从小到大排序。说明排序过程:
初始关键字 [49 39 65 98 67 22 29 49]
第一趟排序: 22 [39 65 98 67 49 29 49]
第二趟排序: 22 29 [65 98 67 49 39 49]
第三趟排序: 22 29 39 [98 67 49 65 49]
第四趟排序: 22 29 39 49 [67 98 65 49 ]
第五趟排序: 22 29 39 49 49 [98 65 67]
第六趟排序: 22 29 39 49 49 65 [98 67]
第七趟排序: 22 29 39 49 49 65 67 [98]
最后排序结果: 22 29 39 49 49 65 67 98
下面是伪码算法:
for(int i=0;i<n-1;i++)
{ min_index=i;
for(intj=i+1;j<n;j++) //每次扫描选择最小项
if(arr[j]<arr[min_index]) min_index=j;
if(min_index!=i) //将最小项移到列表中的正确位置
{ int tp;
tp=arr[i]; arr[i]=arr[min_index];arr[min_index]=tp;
}
}
作业思考:设计程序,从键盘随机输入10个整数,然后从小到大输出。请输出整个排序过程各步数据序列。
三.插入排序
插入排序法字面解释是将等排的数目插入它应该该占据的位置。所谓插入排序法,就是每次检查第i个数字,如果在它的左边的数字比它大或小,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小或大,就可以停止。下面举例说明。
原数据序列:【6,1,5,2,3 】//从第二个数字1开始,1和前面6比较后,得出下面数列
【1,6,5,2,3 】//第三个数字5和前面6、1比较后,得出下面数列
【1,5,6,2,3 】//第四个数字2和前面6、5、1比较后,得出下面数列
【1,2,5,6,3 】//第五个数字3和前面6、5、2比较后,得出下面数列
【1,2,3,5,6 】
下面是伪码算法:
for(int i=1;i<n;i++) //从第1个数组元素开始,arr[0]作为最初已排序部分
{ int tp=arr[i]; //tp标记为未排序第一个元素
int j=i-1;
while (j>=0 &&arr[j]>tp) //寻找tmp应插入的位置
{ arr[j+1]=arr[j];
j--;
}
arr[j+1]=temp;
}
作业思考:设计程序,从键盘随机输入10个整数,使用插入排序将其从小到大输出。请输出整个排序过程各步数据序列。
- 排序算法之二-选择排序和插入排序
- 排序算法之选择排序和插入排序
- 排序算法之“选择排序-冒泡排序-插入排序”
- 经典排序算法之冒泡、选择和插入排序
- 排序算法之选择和插入排序的简单优化
- 算法之插入排序与选择排序
- C++排序算法之选择、插入排序
- 算法系列(二)冒泡排序、选择排序、插入排序和希尔排序(Java实现)
- 算法学习--选择排序和插入排序
- 常用内部排序算法之四:简单选择排序、直接插入排序和冒泡排序
- 简单排序算法之选择排序、直接插入排序和冒泡排序
- 排序算法之直接插入排序、选择排序和冒泡排序
- (九)数据结构之简单排序算法实现:冒泡排序、插入排序和选择排序
- 简单排序算法之插入排序、选择排序和冒泡排序
- 排序算法之二:选择排序之【简单选择排序】
- 排序算法之二 折半插入排序
- 排序算法二之插入排序
- java排序算法之二插入排序
- Android记事本开发
- 利用OpenCV鼠标控制窗口大小
- 解决方案~Microsoft Security Client OOBE 程序错误
- C++ STL inner_product
- POJ1860_钉子小球_DP
- 排序算法之二-选择排序和插入排序
- 佛學與編程 (楞嚴經)
- POJ1157_LITTLE SHOP OF FLOWERS_DP
- 利用word2vec对关键词进行聚类
- Linux下USB转串口驱动
- POJ1683_Common Subsequence_DP
- STM32和Linux(转载)
- android 的 setTag
- Android Fragment详解(四):管理Fragment