Java使用分治递归的思想实现快速排序
来源:互联网 发布:网络剧小视频 编辑:程序博客网 时间:2024/05/16 08:37
最近想探究一下算法方面的问题,闲着无聊就撸了一波快排的代码,以前都是直接拿过来用的,但是想想毕竟那是别人的东西,只有自己学会才算自己的,思路其实不难,只是需要好的处理一些细节问题,下面来说说思路和代码实现。
基本思路:
* 1、定义一个函数找出基准值temp。
* (1)找基准的函数中:定义一个头指针,尾指针,头指针指向数组的第一个元素,尾指针指向数组的最后一个元素。* (2)在头指针指向的位置小于尾指针的情况下: 尾指针对数组从右至左找小于temp值的位置,然后将该位置上的元素值与头指针指定的位置上的元素值进行交换。
* (3)在头指针指向的位置小于尾指针的情况下: 头指针对数组从左至右找大于temp值的位置,然后将改位置上的元素值与尾指针指定的位置上的元素值进行交换。
* (4)循环执行(1)(2)直到头指针指向的位置等于尾指针指向的位置时,返回头指针指向的位置(也就是基准的位置值)。
* 2、利用分治思想,将原问题划分成多个子问题,也就是通过基准将数组一分为二,再对数组arr[0 ~ temp-1]和数组arr[temp+1 ~ arr.lengh-1]进行排序。
* 3、利用递归的思想,排序时也按照步骤1执行,然后继续划分,继续排序,一直递归,直到只有一个元素为止。
* PS:(程序中递归传入的参数是要排列数值的第一个值left和最后一个值right,所以当数组中只有一个元素的时候,即left=right)
*
* 实例说明:数组的初始序列为 :4 3 5 7 2 9 4 1 3 8 11
* 执行从右至左查找后:3 3 5 7 2 9 4 1 4 8 11
* 执行从左至右查找后:3 3 4 7 2 9 4 1 5 8 11
* 执行一趟排序后:3 3 1 2 4 9 4 7 5 8 11
package com.meession.quicksort;public class QuickSort {private int[] arr = { 4, 3, 5, 7, 2, 9, 4, 1, 3, 8, 11 };public static void main(String[] args) {QuickSort qs = new QuickSort();qs.init(); //初始化qs.showArr(); //打印已经排列好的数组}private void init() { //初始化int left = 0;int right = arr.length;QSort(left, right); //调用递归函数进行排序}private void QSort(int left, int right) { //递归进行排序if (left < right) {int temp = findSign(left, right); //找出基准位置QSort(left, temp); // 递归QSort(temp + 1, right);} elsereturn;}private void showArr() { //输出数组中的元素int i = 0;while (i < arr.length)System.out.print(arr[i++] + " ");System.out.println();}private int findSign(int left, int right) { //找出基准位置函数int temp = arr[left];while (left < right) {while (left < right) {if (temp > arr[--right]) { // --i表示先执行一次减,所以此处初始值为arr[right-1]swap(left, right);break;}}while (left < right) {if (temp < arr[++left]) {swap(left, right);break;}}} // while循环结束的条件就是left=rightreturn left;}private void swap(int left, int right) { //交换两个数int temp = arr[left];arr[left] = arr[right];arr[right] = temp;}}
0 0
- Java使用分治递归的思想实现快速排序
- 快速排序的递归实现。 分治法。
- 快速排序(递归与分治的思想)
- 快速排序 : 分治和递归思想
- 【算法】快速排序——基于分治思想的实现
- 7、JAVA实现快排--分治+递归的思想
- 递归分治法在快速排序中的应用 java以界面的方式实现
- 快速排序基于分治法的思想
- 分治思想的应用:C++实现快速排序和随机化的快速排序
- 不使用递归实现的快速排序
- 快速排序算法-分治思想
- 分治思想之快速排序
- 分治思想之快速排序
- 分治思想之快速排序
- 快速排序之“挖坑填数+分治”思想实现
- <菜鸟学算法-A排序(分治的思想:快速排序)>
- 分治算法的应用,快速排序java实现
- 排序算法之快速排序的思想以及Java实现
- BZOJ4537: [Hnoi2016]最小公倍数
- FlowLayout布局管理器
- JSP页面中的include方法比较
- Mybatis最入门---映射文件(2)
- JSP内置对象
- Java使用分治递归的思想实现快速排序
- 设计模式学习--(3)
- 《Angular JS 权威教程》 - 内置指令
- 用javascrip实现一个简单的加减乘除计算器
- Delphi字符串函数大全
- 浙大 PAT Advanced level 1006. Sign In and Sign Out
- Java简单的MVC框架 dispatcher
- 如何在UITextView中设置页边距(填充)?
- 自定义控件三部曲之绘图篇(八)——Paint之ColorMatrix与滤镜效果