简单选择排序
2016-03-30 09:44
204 查看
简单选择排序的基本思想:
第1趟,在待排序记录r[1]~r
中选出最小的记录,将它与r[1]交换;
第2趟,在待排序记录r[2]~r
中选出最小的记录,将它与r[2]交换;
第i趟在待排序记录r[i]~r
中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。
以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列:
初始序列:{ 49 27 65 97 76 12 38}
第1趟:12与49交换:12
{ 27 65 97 76 49 38 }
第2趟:27不动 :12 27
{ 65 97 76 49 38 }
第3趟:65与38交换:12 27 38{ 97 76 65 49}
第4趟:97与49交换:12 27 38 49{ 97 76 65
}
第5趟:76与65交换:12 27 38 49 65{ 97 76
}
第6趟:97与76交换:12 27 38 49 65 76 97
代码:
第1趟,在待排序记录r[1]~r
中选出最小的记录,将它与r[1]交换;
第2趟,在待排序记录r[2]~r
中选出最小的记录,将它与r[2]交换;
第i趟在待排序记录r[i]~r
中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。
以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列:
初始序列:{ 49 27 65 97 76 12 38}
第1趟:12与49交换:12
{ 27 65 97 76 49 38 }
第2趟:27不动 :12 27
{ 65 97 76 49 38 }
第3趟:65与38交换:12 27 38{ 97 76 65 49}
第4趟:97与49交换:12 27 38 49{ 97 76 65
}
第5趟:76与65交换:12 27 38 49 65{ 97 76
}
第6趟:97与76交换:12 27 38 49 65 76 97
代码:
#include<iostream> using namespace std; //升序 void SelectSortUpNumOne(int array[], size_t size) //参数一接受数组,参数二接受数组元素个数 { for (int i = 0; i < size-1; ++i) { int index = i; //假设数组第一个数就是最小的;无序序列的第一个 for (int j = index+1; j < size; ++j) { if (array[j] < array[index]) //每一趟中,把无序序列中最小的和第一个数交换; { swap(array[index],array[j]);//缺点是 交换的次数太多 } } } } //升序 void SelectSortUpNumTwo(int array[], size_t size) //参数一接受数组,参数二接受数组元素个数 { for (int i = 0; i < size - 1; ++i) { int index = i; //假设数组第一个数就是最小的; for (int j = index + 1; j < size; ++j) { if (array[j] < array[index]) //每一趟中,把最小数下标的给第一个数下标; { index = j; //index始终都是最小下标 } } if (index != i) //每趟只用交换一次 { int tmp = array[index]; array[index] = array[i]; array[i] = tmp; } } } int main() { <span style="white-space:pre"> </span>int a[10] = {9,2,5,8,4,1,6,7,3,0}; SelectSortUpNumOne(a, 10); SelectSortUpNumTwo(a, 10);
}
相关文章推荐
- Android App打包自动生成版本号Versin Name与Version Code方法之完美方案
- 简单选择排序
- jQuery 简介
- javaweb学习总结(八)——HttpServletResponse对象(二)
- js数组去重
- linux一键安装包的使用教程
- php启动时候提示PHP startup的解决方法
- 一个数组dataArr,我现在拿到一个对象A,想判断在数组中有没有这个对象A,如果存在则从数组dataArr中删除A,如果不存在则将A加入到数组dataArr中
- Mapreduce中Combiner的使用以及注意点
- 关于 android 中 postDelayed方法的讲解
- 导弹拦截与Dilworth定理
- PS制作逼真的立体卷边效果
- MagSafe Lightning
- Android项目重构之路:实现篇
- nptq使用
- mybatis的多条件查询
- patch和git制作和应用补丁
- Java到底是传值还是传引用
- MySQL详解--锁
- messagebox 和 messagedlg