0
点赞
收藏
分享

微信扫一扫

算法-----快速排序

产品喵dandan米娜 2022-03-14 阅读 81

比如说;给定一组数: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 条评论