多种排序类型
来源:互联网 发布:linux i have no name 编辑:程序博客网 时间:2024/06/05 14:07
直接插入排序:
public void InsertSort(int[] dataArray) { for (int i = 1; i < dataArray.Length; i++) { int iValue = dataArray[i]; bool isInsert = false; //拿到i位置的元素,跟前面所有的元素作比较 //如果发现比i大的,就让它向后移动 for (int j = i - 1; j >= 0; j--) { if (dataArray[j] > iValue) { dataArray[j + 1] = dataArray[j]; } else { //发现一个比i小的值就不移动了 dataArray[j + 1] = iValue; isInsert = true; break; } } if (isInsert == false) { dataArray[0] = iValue; } } }
简单选择排序:
//简单选择排序 public void SelectSort(int[] dataArray) { for (int i = 0; i < dataArray.Length - 1; i++) { int min = dataArray[i]; int minIndex = i; //最小值所在索引 for (int j = i + 1; j < dataArray.Length; j++) { if (dataArray[j] < min) { min = dataArray[j]; minIndex = j; } } if (minIndex != i) //把最小值交换,放在最前面 { int temp = dataArray[i]; dataArray[i] = dataArray[minIndex]; dataArray[minIndex] = temp; } } }
冒泡排序:
//冒泡排序: public void SeqSort(int[] dataArray) { for (int i = 0; i < dataArray.Length ; i++) { for (int j = 0; j < dataArray.Length-1; j++) { if (dataArray[j] > dataArray[j + 1]) { int temp = dataArray[j]; dataArray[j] = dataArray[j + 1]; dataArray[j + 1] = temp; } } } }
判断排序
public void DeciseSort(int[] dataArray) { bool isSwap = true; do { isSwap = false; for (int i = 0; i < dataArray.Length - 1; i++) { if (dataArray[i] > dataArray[i + 1]) { int temp = dataArray[i]; dataArray[i] = dataArray[i + 1]; dataArray[i + 1] = temp; isSwap = true; } } } while (isSwap); }
快速排序:
快速排序的思想:先定义一个值,i=0,j=7,k=a[0];把数组分成两部分,把比k大的放右边,比k小的放左边,先从右往左查找,查找到一个比k小的值,让这个值与k交换,然后在从左往右查找,查找到一个比k大的值,与k交换,记住i,j的索引,然后继续循环查找,直到i=j的时候,在对两边分别排序
//快速排序 //对数组dataArray中索引从left到right之间的数做排序 //dataArray要排序的数组 //left要排序数据的开始索引 //right要排序数据的结束索引 public void QuickSort(int[] dataArray, int left, int right) { if (left < right)//必须判断 左边小于右边的索引 { int x = dataArray[left]; //基准数,把比它小的或等于放左边,然后把它大的放右边 int i = left; // int j = right; //用来做循环的标志位 while (true && i < j) //当i=j的时候,我们找到了一个中间位置,这个中间位置就是基准数应该所在的位置 { //从右往左查找(从前往后) 找一个比x小(或等于),放在我们坑里,坑位于i的位置 while (true && i < j) { if (dataArray[j] <= x) //找到了一个比基准数 小于或者等于的数字,应该把它放在x的左边 { dataArray[i] = dataArray[j]; break; } else { j--; //向左移动 到下一数字,然后作比较 } } //从左往右查找(从前往后) 找一个比x大的数字,放在我们坑里 现在坑位于j的位置 while (true && i < j) { if (dataArray[i] > x) { dataArray[j] = dataArray[i]; break; } else { i++; } } } //跳出循环 现在i==j i是中间位置 left-i-right dataArray[i] = x; QuickSort(dataArray, left, i - 1); QuickSort(dataArray, i + 1, right); } }
阅读全文
0 0
- 多种排序类型
- 冒泡排序,可以排多种类型
- 可对多种类型进行排序的冒泡排序
- 多种类型转换实例
- 多种类型提示窗口
- SharedPreferences存储多种类型
- 多种排序比较
- 多种排序介绍
- 多种参数排序说明
- MYSQL 语句多种排序
- 多种排序算法
- Java多种排序算法
- 【算法】多种排序
- 插入排序多种实现
- 多种排序总结
- 多种排序组合
- angular 排序多种方法
- LoadRunner 的多种Vuser类型
- Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com
- 手册上查询优化器概述
- 立即调用的函数表达式
- 优化 SQL SELECT 语句性能的 6 个简单技巧
- linux下内存泄露查找、BUG调试
- 多种排序类型
- Android Studio升级到3.0版本后布局不能预览解决方案
- Reason: image not found 错误解决方法,这才是正确的解决方法
- Android Studio3.0之后gradle.build中dependencie依赖由compile变为implementation
- zookeeper整合kafka
- struts中无法通过直接访问到根目录
- 触发器的介绍及MySQL触发器的简单例子
- css字体大小兼容性问题
- Badboy自动化测试工具9 查看回放结果