快速排序算法的java实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

java代码实现如下:

package PaiXuFenXi;

//测试方法
public class Quicksort {
    public static void main(String[] args) {

        int b[]={10,9,8,7,6,5,4,3,2,1};
        Quicksort text=new Quicksort();

        text.quick(b,0,b.length-1);

        for(int i=0;i<b.length;i++)
        System.out.println(b[i]);
    }

//key值寻找方法
    int Median3(int a[],int Left,int Right)
    {
        int Center=(Left+Right)/2;

       if(a[Left]>a[Center]&&a[Left]<a[Right]||a[Left]<a[Center]&&a[Left]>a[Right])
       {
           Swap(a,Left,Right);
       }
       else if(a[Center]>a[Right]&&a[Center]<a[Left]||a[Center]<a[Right]&&a[Center]>a[Left])
       {
           Swap(a,Center,Right);
       }
       else if(a[Right]>a[Left]&&a[Right]<a[Center]||a[Right]<a[Left]&&a[Right]>a[Center])
       {
           Swap(a,Right,Right);
       }

        return a[Right];
    }
    
    //核心排序算法
    void quick(int a[],int Left,int Right)
    {
        int i,j;
        int Pivot;
        if(Left+3<=Right)
        {
            Pivot=Median3(a,Left,Right);
            i=Left;
            j=Right-1;
            for(;;)
            {
                while(a[i]<Pivot){i++;}
                while(a[j]>Pivot){j--;}
                if(i<j)
                {
                    Swap(a,i,j);
                }
                else
                    break;
            }
            Swap(a,i,Right);

            quick(a,Left,i-1);//对左边部分进行递归

            quick(a,i+1,Right);//对右边部分递归
        }
        else if(Left+2==Right)//当只有三个元素时进行简单排序
        {
            easysort(a,Left,Right);
        }
        else if(Left+1==Right){//当只有两个元素时进行简单排序
            easysort(a,Left,Right);
        }
        else if(Left==Right)//一个元素时什么都不做
        {
        }

    }
    //排序区间小于等于3时使用的排序方法
    void easysort(int a[],int Left,int Right)
    {
        int Center=Left+1;

        if(a[Left]>a[Center])
        {
            Swap(a,Left,Center);
        }
        if(a[Left]>a[Right])
        {
            Swap(a,Left,Right);
        }
        if(a[Center]>a[Right])
        {
            Swap(a,Center,Right);
        }

    }
    
//数值交换方法
    void Swap(int a[],int j,int i){
        int m;
        m=a[i];
        a[i]=a[j];
        a[j]=m;
    }

}

结果如下:
在这里插入图片描述

发布了73 篇原创文章 · 获赞 1 · 访问量 2460

猜你喜欢

转载自blog.csdn.net/c1776167012/article/details/104923227
今日推荐