算法-----快速排序

快速排序的思路就是先定个锚点,我们可以选择前端的一个数或者后端的一个数作为锚点,然后从另一端开始匹配,将小于的数放在前面,大于的数放在后面。

比如说;给定一组数:30,40,60,10,20,50

  • 需要两个指针i、j分别指向数组的头和尾
  • 确定锚点x,令x=30
  • 从后面往前遍历,并判断是否存在比锚点小的数,若有则返回它的索引值
  • 判断i<j;true则将将该值赋给指针i指向的地址,并将指针i向后移动
  • 移动指针i,直到查询到比锚点大的值,返回索引
  • 判断i<j;true则将将该值赋给指针j指向的地址,并将指针j向前移动
  • 慢慢遍历,直到指针i和指针j指向同一地址,则退出循环
  • 在将锚点的值赋予两个指针指向的地址
  • 将锚点前后的数分成两个数组,在分别进行递归操作,直到完成排序

代码如下:

package com.piao.sort;

/**
 * 快速排序:
 * 思路:先找一个基点,然后将其他数依次与之比较,小的放前面,大的放后面,然后利用分治的方法
 */
public class QuickSortTest {
    public static void main(String[] args) {

        int[] a={30,40,60,10,20,50};
        System.out.println("before:");
        for (int i : a) {
            System.out.print(i+",");
        }
        System.out.println(" ");
        System.out.println("after:");
        quick_sort(a,0,a.length-1);
        for (int i : a) {
            System.out.print(i+",");
        }

    }

    public static void quick_sort(int[] a ,int low,int high){

        if (low<high){
            int i,j,x;
            x=a[low];
            i=low;
            j=high;
            while (i<j){
                while(i<j&&a[j]>x){
                    j--;
                }
                if (i<j){
                    a[i++]=a[j];
                }
                while(i<j&&a[i]<x){
                    i++;
                }
                if (i<j){
                    a[j--]=a[i];
                }
            }
            a[i]=x;
            quick_sort(a,low,i-1);
            quick_sort(a,i+1,high);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值