JAVA实现快速排序算法

  • 快速排序算法是什么?

排序快速算法的英文冒泡排序的改进,比起冒泡排序,快速排序算法的速度要快了很多;

  • 快速排序算法有什么用?

快速排序算法的原理:

若有一个数组为A,长度为N;获取一个key(一般是数组的第一个元素),设置两个参数(i,j)中,i = 0,j = N-1;

先从j开始往前搜索(j--),如果A [j]>key,则将A [j]的中的值赋给A [i],即将小于键的值放到前面;

上述运行一遍后再从我开始往后搜索(i ++),如果A [i]>key,则将A [i]中的值赋给A [j],即将大于键的值放到后面去;

循环运行,最后的到的数组会以键值为分界将整个数组分成两部分,前半部分的值都是小于关键的,后半部分的值大于密钥;

特别注意,排序完以后的数组并不是从小到大的,还需要使用递归将整个数组继续排序才能得到一个从小到大的数组;

  • 快速排序算法怎么用?

快速排序的原理上面已经提到了,接下来就是一些简单的代码,我们首先需要定义一个方法,传入3个参数,这里需要传入一个数组,

public void sort(int a[],int i,int j)

这里I = 0,j = a.length-1;在方法里面我们还需要定义一个参数,key= a [i];然后就可以开始我们的算法了

public static void sort(int a[],int i, int j) {  
		
        int start = i;  
        int end = j;  
        int key = a[i];  
  
        while (start < end) {  
            // 找到第一个小于key的值(从后往前),进行值互换。  
            while (start < end && a[end] >= key) {  
            	end--;  
            }  
            if (a[end] < key) {  
                int t = a[end];  
                a[end] = a[start];  
                a[start] = t;  
            }  
  
            // 找到第一个大于key的值(从前往后),进行值互换。  
            while (start< end && a[start] <= key) {  
            	start++;  
            }  
            if (a[start] > key) {  
                int t = a[start];  
                a[start] = a[end];  
                a[end] = t;  
            }  
        }  
  
        if (start > i) {  
            sort(i, start - 1, a);  
        }  
        if (end< j) {  
            sort(start + 1, j, a);  
        }  
    }  

然后我们只需要在main方法中调用就可以了

 public static void main(String[] args) {  
        // 创建数组,并赋值  
        int[] a = { 1223, 234, 42, 1, 53, 6 };  
        // 第一个  
        int i = 0;  
        // 最后一个  
        int j = a.length - 1;  
        // 调用排序的方法  
        sort(a,i,j);  
        // 输出  
        for (int k : a) {  
            System.out.println(k);  
        }  
    }  
这样我们就可以得到一个排序好了的数组了



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值