排序算法
来源:互联网 发布:网络问政 编辑:程序博客网 时间:2024/05/18 18:14
一、直接插入排序:
思路:无序队列逐步向有序序列插入元素。
public static void InsertSortMethod(List<int> list) { for (int i = 1; i < list.Count; i++){ //第一个元素不用动了,后面的元素一个一个的去找自己的位置 if (list[i] < list[i - 1]) //因为前面的都是排好序的,你一开始都比有序的最大的大,那就不要凑热闹了,呆在自己位置吧 { int temp = list[i]; //要找前面的位置,自己原来的位置可能不保,先找个临时位置暂避一下。 int j = 0; for (j = i - 1; j >= 0&&temp<list[j]; --j) { list[j + 1] = list[j]; //只有有比你大的,人家就升一级挪个窝,有下一个来和你比较,啥时候出现了比你小的那个,那上一个人的位置就是你的 } list[j + 1] = temp; } } }
时间复杂度:O(n)~O(n*n) 空间复杂度:O(1) 稳定的排序算法
---------------------------------------------------------------------------------------------------------
二、简单选择排序
思路:
依次从待排序列里找到最小的,放到排好的后面
public static void SelectSortMethod(List<int> list) { int temp; for (int i = 0; i < list.Count-1; i++) { //要排序的趟数,第一个位置到倒数第二个位置排好后,排序就确定了 (Count-1)趟 //i的值还表示找到的最小数存放的位置 for (int j = i+1; j < list.Count; j++) { //j=i+1 if (list[j] < list[i]) { //找到小的就换位置,这样一遍遍历,最小的值落到了i的位置 temp = list[j]; list[j] = list[i]; list[i] = temp; } } } }
上面算法,性能有可以提升的空间,在内层循环中,不用每次判断都交换,只要找到最小元素的索引就行了,下面是改造后的算法:
public static void SelectSortMethod2(List<int> list) { int temp = 0; int lowindex = 0; for (int i = 0; i < list.Count - 1; i++) { lowindex = i; for (int j = i + 1; j < list.Count; j++) { if (list[j] < list[lowindex]) { lowindex = j; } } temp = list[lowindex]; list[lowindex] = list[i]; list[i] = temp; } }
时间复杂度:O(n*n) 空间复杂度:O(1) 稳定的排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- javascript的定时器
- 使用游標的一個存儲過程
- ios拷贝小议
- js中masonry与infinitescroll结合
- 【Ubuntu手记】64位Ubuntu11.10下 eclipse配置Android开发环境所遇到的问题
- 排序算法
- java程序员面试必备的32个要点
- Lucene3.1对QueryParser做了调整
- uva 146 - ID Codes
- D3D学习笔记(初始化Direct3D)
- 内部UML培训文件,欢迎大家批评指正
- C-Ruby源码分析
- release 去掉log
- Direct3D初始化之细节处理