算法学习之三:快速排序
来源:互联网 发布:淘宝账号怎么解冻 编辑:程序博客网 时间:2024/06/03 21:20
快速排序的原理:
在数组中选择一个称为主元(pivot)的元素将数组分为2部分,使得第一部分中的所有元素都小于或等于主元,第二部分中的所有元素都大于主元。对第一部分递归的应用快速排序算法,第二部分递归的应用快速排序算法。
图解快速排序过程:
代码解释快速排序:
public class QuickSort1 { public static void quickSort(int[] list,int low,int hight){ if(hight>low){ int index = getIndex(list,low,hight); quickSort(list,0,index-1); //递归左边快速排序 quickSort(list,index+1,hight);//递归右边快速排序 } } private static int getIndex(int[] list, int low, int hight) { int indexItem = list[low];//选取第一个元素作为主元 int left = low; int right = hight; while(left!=right){ //先从右边走起:右边的都大于indexItem,右边继续移动 while(list[right]>indexItem && right!=left){ right--; } //再从左边走起:左边的都小于或等于indexItem,左边继续移动 while(list[left]<=indexItem&&right!=left){ left++; } if(right>left){ int temp = list[left]; list[left] = list[right]; list[right] = temp; } } //跳出循环的情况:left = right,分两种情况: //(1) right先走,right挪动到left位置;(2)right走完之后,left再走,left挪动到right //不管哪种情况,都是left所处的元素是小的,互换left和indexItem list[low] = list[left]; list[right] = indexItem; return right; }}
测试结果:
int[] list3 = {2,15,12,5,8,55,7,33,62,7,10,9,4}; QuickSort1.quickSort(list3,0,list3.length-1); for(int i = 0;i<list3.length;i++){ Log.e("hxy",list3[i]+" "); }
调用quickSort之后,从打印台中可以看到,数据是以2 , 4, 5 , 7, 7 ,8 , 9, 10 , 12 , 15 , 33 ,55 , 62排列。
快速排序的时间复杂度:nlog2n
0 0
- 算法学习之三:快速排序
- 算法学习(排序三)快速排序
- 排序算法三之快速排序
- 算法学习之排序算法:快速排序
- 算法学习之排序:快速排序算法
- 排序算法学习之快速排序算法
- 算法学习之快速排序
- 算法学习之快速排序
- 经典算法学习:排序之快速排序
- 算法学习之排序(5)--快速排序
- 算法学习点滴-排序之快速排序
- 算法学习笔记--排序之快速排序
- 算法学习之快速排序算法
- #算法学习之路#快速排序算法
- 常用算法之排序算法三【快速排序】
- 算法学习之排序学习之快速排序
- 排序算法之三——快速排序
- 排序算法之三路划分的快速排序
- 数据结构 绪论
- Eclipse+PyDev配置搭建Python开发环境
- [Leetcode] 116. Populating Next Right Pointers in Each Node 解题报告
- Vijos 1001题:谁拿了最多奖学金
- java多线程并发机制
- 算法学习之三:快速排序
- iOS 点击cell同步cell中添加的UIButton控件
- 基于tensorflow 1.0的图像叙事功能测试(model/im2txt)
- 数字证书原理 https 完整过程解析
- Android相关的日志输出
- 阅读帮助
- Kotlin语言入门
- 高斯白噪声
- Android 使用服务注册广播接收者