排序(四)之快速排序 指针交换法

在上一节讲的填坑法基础上,再修改一下,指针交换法的原理是,也是先移动右指针,找到一个符合条件的元素,再移动左指针,找到一个符合条件的元素,,右指针找到的是比基准元素小的,左指针找到的是比基准元素大的,然后将两个指针指向数据进行交换,然后再继续移动右指针,然后左指针,直到两个指针重合,把基准元素与两个指针重合时的元素交换,然后再递归循环。

 

代码如下:   用递归实现   

package com.xhx.sort;


import org.junit.Test;

import java.util.Arrays;

/**
 * 指针交换法,递归
 */

public class App2 {


    @Test
    public void testQuickSort() {
        int[] array = {1, 0};
        quickSort(array, 0, array.length - 1);
        System.out.println(Arrays.toString(array));

    }

    public void quickSort(int[] arr, int startIndex, int endIndex) {
        if (startIndex >= endIndex) {
            return;
        }

        //基准位置默认地一个元素
        int pivot = arr[startIndex];
        int left = startIndex;
        int right = endIndex;

        while (right > left) {
            //右指针循环左移
            while (left < right && arr[right] > pivot) {
                right--;
            }

            //左指针循环右移
            while (left < right && arr[left] <= pivot) {
                left++;
            }
            if(left<right){
                int tem = arr[left];
                arr[left] = arr[right];
                arr[right] = tem;
            }

        }
        //基准位置与重合时left与right交换
        int tem = arr[left];
        arr[left]  = arr[startIndex];
        arr[startIndex] = tem;


        quickSort(arr, startIndex, left - 1);
        quickSort(arr, left + 1, endIndex);

    }
}

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值