排序算法-快速排序:

/**
* 给定一个数组:按照从小到大排序。
* 思路:
* 1. 获取第一个数放入临时变量data,将大于data的数放右边,小于data的数放在左边。
* 2. data左边和右边的数组,使用第一点的方法类推。
*
* 第一点的具体实现:
* 获取第一个数放入临时变量data,从右边开始遍历,获取第一个比data小的数,将这个数放入data原本的位置(位置角标为0,满足小于data的数放入
* data左边的逻辑),然后从左开始遍历获取第一个大于data的数,放入刚刚空出来的位置(这个位置是右边是一定大于data的,所以将此数放入该位置
* 满足大于data的数放右边的逻辑,再右边,再左边,直到左右重合停止,并最后将data放入最后的重合的空位中。)。
*/
public class QuickSort {
public static void main(String args[]){
int[] num={4,5,2,9,6,4,0,2,4,7};
new QuickSort().QuickSort(num,0,num.length-1);
for(int n:num) {
System.out.print(n+" ");
}
} public int PartSort(int arr[], int low, int high) {
int data = arr[low];
/**一次遍历的方法:插空法 定义一个data将arr[low]存起来,并把这个位置挖空*/
while (low < high) {
while (low < high && arr[high] >= data) {
high--;
}
arr[low] = arr[high];
/**从high,也就是后面往前遍历 找到比键值小的数据 插入到前面留下的空中 high位再次留下空来*/
while (low < high && arr[low] <= data) {
low++;
}
arr[high] = arr[low];
}
arr[low] = data;
/**循环退出后 low和high重合 将将键值赋给第low,并将low返回*/
return low;
} public void QuickSort(int arr[], int low, int high) {
if(low<high) {
//防止发生栈溢出异常
int index = PartSort(arr, low, high);
QuickSort(arr, low, index - 1);
QuickSort(arr, index + 1, high);
}
}
}

运行结果:

最新文章

  1. AC自动机 HDU 2222
  2. flex学习小结
  3. .NET平台下对C3D文件的读写
  4. ThinkPHP在Ubuntu上 : mkdir的使用
  5. linux - markdown编辑器
  6. Java进阶篇设计模式之五-----外观模式和装饰器模式
  7. Codeforces 1082B Vova and Trophies(前缀+后缀)
  8. 远程和Ubuntu服务器进行Socket通信,使用python和C#(准备篇)
  9. 大数据学习笔记5 - Spark
  10. MySQL(1)---索引
  11. ubuntu+anaconda
  12. php判断是不是移动设备
  13. 通过layer-list自定义EditText背景
  14. 网络流——二分图最优匹配KM算法
  15. 微信小程序判断按钮是否显示,或者隐藏
  16. FindBugs错误修改指南 【转】
  17. Maple重点知识总结
  18. window 如何枚举设备并禁用该设备和启用该设备?如何注册设备热拔插消息通知?
  19. C++ std::vector
  20. 【Hutool】Hutool工具类之Http工具——HttpUtil

热门文章

  1. MAC终端中tree命令
  2. 理解Redis单线程运行模式
  3. ceph中rbd的增量备份和恢复
  4. 程序员用于机器学习数据科学的3个顶级 Python 库
  5. 2019-9-26:渗透测试,基础学习,js正则以及什么是目录扫描,笔记
  6. Python 0基础开发游戏:打地鼠(详细教程)VS code版本
  7. Mybatis日志体系
  8. 数据表与简单java类——多对多映射
  9. LinkedList实现原理(JDK1.8)
  10. 配置防盗链、访问控制Directory和FilesMatch