学习笔记之快速排序——quicklySort——基础算法——java
来源:互联网 发布:贵州轩通大数据怎么样 编辑:程序博客网 时间:2024/06/05 04:40
本来在本科学的数据结构特别水,老师和同学们还总是妖魔化快速排序这个算法,,,导致在心里觉得它是一个大boss。。。结果自己动手之后,发现快速排序极其简单,只要熟练他的思想,就不怕写不出来。。
快速排序的思想就是:
找到第一个元素应该在的位置middle,通过左右来回比较,然后以此为分界,让左边的数组重复这一步骤,右边的数组重复这一步骤,利用递归的思想,将一个大数组拆分成无数个小数组,在遇到标记跳出点——数组长度小于等于1的这个跳出点的时候,将这个操作弹栈。
比较的详细顺序就是,先记录最左边的数值 temp,用这个数值与右边的数字比较,正常应该是比右边的小的,然后以此让右边的角标做 -- 的操作,当发现一个temp比它还大的数字,把这个数字记录在左边,然后从左边开始比较,正常应该左边的数字都比temp要小,发现大的数字了,就用右边角标记录的位置将这个数字记录下来,最后当左右角标相等的时候,把temp的值赋给左角标指向的位置,一次比较就完成了,并且获得了这个middle应该存在的位置。
之后用迭代的思想,把middle左边的数组排序一遍,右边的排序一遍。。。。还是比较简单易懂的。。。如果你没懂,那可能是我讲的不明白,直接看代码应该就会懂了。
涉及到的数据结构就是三个指针,第一个指针记录这个哨兵的值,另外两个指针分别记录 left 与 right的位置。
详细代码如下:
public void quicklySort(int[] a){
if(a.length<=1){
return;
}
quicklySort(a, 0, a.length-1);
private void quicklySort(int[] a, int left, int right){
if(left<right){
int middle = getMiddle(a, left, right);
quicklySort(a, left, middle);
quicklySort(a, middle+1, right);
}
}
private int getMiddle(int[] a, int left, int right){
int temp = a[left];
while(left<right){
while(temp<a[right]&&left<right){
right--;
}
a[left] = a[right];
while(temp>a[left]&&left<right){
left++;
}
a[right] = a[left];
}
a[left] = temp;
}
- 学习笔记之快速排序——quicklySort——基础算法——java
- 基础算法学习笔记—快速排序
- 算法基础之排序—快速排序
- 黑马程序员—Java基础学习笔记之排序算法:选择排序&冒泡排序
- 基础算法学习笔记—归并排序
- 算法导论学习笔记——快速排序算法
- java面试准备之基础排序——快速排序
- 排序算法之——快速排序(Java实现)
- 排序算法之——快速排序(Java实现)
- 排序算法学习——快速排序
- 算法——排序之快速排序
- 算法——排序之快速排序
- 排序算法之——快速排序
- 基础算法——快速排序
- 算法基础——快速排序
- 基础算法——快速排序
- 《算法导论》学习笔记(2)——快速排序
- Java排序算法——快速排序
- 正则
- 仿微信个人二维码切换样式
- 个人对javascript作用域的理解
- 不使用C/C++标准库实现的浮点数与字符串相互转换(最给力)
- 填坑
- 学习笔记之快速排序——quicklySort——基础算法——java
- THREEJS(版本85)实现鼠标点击的高亮显示(如颜色变化)
- 本地测试vue项目,开全局vpn代理出…
- Android 生成不同服务器配置,不同APPID的apk
- iOS 各种 锁
- vue+webpack实现异步组件加载
- 生成html模板
- 《将博客搬至CSDN》
- div自动换行及截断文本