排序
来源:互联网 发布:sql注入的原理 编辑:程序博客网 时间:2024/04/29 09:23
(1)冒泡排序
1.思路:
两重循环,
第一重循环表示需要比较哪些数据,(因为最大的放在最后面,就不用比了;次大的放在倒数第二个,也不用比了)
第二重循环表示从第0个开始比较,直至那个数据
2.代码
<span style="white-space:pre"></span>int[] test = new int[]{34,23,67,56,78,43,63,28};for(int i=test.length-1; i>0; i--) //第一次肯定连最后一个也要比较,所以开始为最后一个的下标;如果未比较的只剩一个,那么就不用比较了{for(int j=0; j<i; j++)//从第一个开始,比较到最后一个未确定位置的{ if(test[j]>test[j+1]){int temp = test[j];test[j] = test[j+1];test[j+1] = temp;}}}
(2)快速排序
1.思路
1)调整区间,以第一个元素为标识flag,从尾部向前比较,如果a[end]<flag,则end--,否则a[end]赋值给之前挖的坑(即为a[begin]),同时从begin开始比较,如果a[begin]<flag,则begin++,否则a[begin]>=flag,则a[begin]赋值给之前挖的坑(即为a[end]),再从end位置重复该过程,直至begin>=end,最后将flag赋值给begin、end相遇的地方
2)根据flag分开的两个区间,对这两个区间进行如上调整
3)注意:只有在比较元素的时候含=,其余均为>或<
2.代码
private static void quick_sort(int[] a, int begin, int end){if(begin<end){int mid = adjust(a, begin, end);quick_sort(a, begin, mid-1);quick_sort(a, mid+1, end);}}private static int adjust(int[] a, int begin, int end) {int flag = a[begin];while(begin<end){while(begin<end && a[end]>=flag)end--;if(begin<end)a[begin] = a[end];while(begin<end && a[begin]<=flag)begin++;if(begin<end)a[end] = a[begin];}a[begin] = flag;return begin;}
0 0
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 外链影响排名将如何发展
- 2014ACM鞍山区域赛赛后总结
- 找出一个字符串中最长的连续回文
- 如何获取电信(光)猫路由器的超级帐号密码
- DM6437定时器使用
- 排序
- UVALive 3263 That Nice Euler Circuit 计算几何欧拉定理
- HDU4336 Card Collector
- Oracle中TO_DATE格式
- Max Points on a Line
- 自编Ps教程—我的ps图片欣赏
- asp.net mvc和三层架构联系与区别(转)
- a missing vtable usually means the first non-inline virtual member function 问题
- Makefile万能写法