快速排序学习
来源:互联网 发布:域名注册机构查询 编辑:程序博客网 时间:2024/06/14 10:48
快速排序:
1、取要排序的数组的第一个值(可有其它选择)作为比较值,记为k;
2、将要排序的数组的第一个值的索引记为 i,最后一个值的索引记为 j;
3、从 j 开始倒序遍历和比较的基准值 k 做比较,如果 j >= k;则 j--;如果 j<k; 将数组中索引为 j 的值赋值给数组中 i 的位置然后 i++ ;
4、从 i 开始顺序遍历和比较的基准值 k 做比较,如果 i < k; 则 i++ ; 如果 i > k; 将数组中索引为 i 的值赋值给数组中 j 的位置然后 j--;
5、重复 3、4的操作,直到 i == j结束循环,将比较基准值 k 放到数组的 i 位置中;
6、完成5之后 基准值 k 所在的位置 i 将原数组分成了两份,i 位置之前的值均小于 k ,i 位置之后的值均大于等于 k ,再将这两个数组进行上述1~5的操作,一直分割直到无法再分割(每个数组中只有一个元素);
代码如下:
private static int num =0;//循环次数
public static int[] quickSort(int[] forSort,int start,int end){
if(start < end){
int k = forSort[start];
int i = start;
int j = end;
while(i<j){
while(i<j && forSort[j]>k){
num++;
j--;
}
if(i<j){
forSort[i] = forSort[j];
i++;
}
while(i<j && forSort[i] < k){
num++;
i++;
}
if(i < j){
forSort[j] = forSort[i];
j--;
}
}
forSort[i] = k;
System.out.println("分次结果:"+Arrays.toString(forSort)+";i="+i+";j="+j);
Quicksort.quickSort(forSort,start,i-1);
/*递归调用,把key后面的完成排序*/
Quicksort.quickSort(forSort,i+1,end);
}
return forSort;
}
public static void main(String[] args) {
int[] array = {2,5,6,8,5,4,6,9,4,9};
int[] sorts = Quicksort.quickSort(array, 0, array.length-1);
System.out.println("最终结果:"+Arrays.toString(sorts)+",num="+num);
}
}
结果
分次结果:[2, 5, 6, 8, 5, 4, 6, 9, 4, 9];i=0;j=0
分次结果:[2, 4, 4, 5, 5, 8, 6, 9, 6, 9];i=4;j=4
分次结果:[2, 4, 4, 5, 5, 8, 6, 9, 6, 9];i=2;j=2
分次结果:[2, 4, 4, 5, 5, 6, 6, 8, 9, 9];i=7;j=7
分次结果:[2, 4, 4, 5, 5, 6, 6, 8, 9, 9];i=6;j=6
分次结果:[2, 4, 4, 5, 5, 6, 6, 8, 9, 9];i=9;j=9
最终结果:[2, 4, 4, 5, 5, 6, 6, 8, 9, 9],num=15
- 排序--快速排序学习
- 排序--快速排序学习
- 排序--快速排序学习
- 排序算法学习- 快速排序
- 交换排序:快速排序 学习
- 排序算法学习:快速排序
- 快速排序学习1
- 快速排序学习
- 学习快速排序
- 快速排序学习笔记
- 快速排序学习
- 学习笔记--快速排序
- 快速排序学习笔记
- 算法学习,快速排序
- 学习python 快速排序
- 快速排序学习
- 算法学习--快速排序
- 算法学习:快速排序
- 高精度减法
- SqliteDeveloper使用方法及注册
- 通过SSMS连接Azure SqlServer
- 紫书例题6-6 UVa 679 (二叉树
- HTTP协议
- 快速排序学习
- windows 下用命令启动tomcat
- U-Mail邮件中继针对性横扫邮件通关六大阻力
- LinuxIPC之信号
- Spring Boot修改最大上传文件限制:The field file exceeds its maximum permitted size of 1048576 bytes.
- http请求重写为https要注意的问题
- 仿知乎日报2.64版本
- 微信小程序 头什么样的跳转方式 头部会有返回
- JavaComparator排序,Comparable与Comparator的区别