java 快速排序算法简单_java排序算法实现之快速排序

所谓快速排序就是将数组分成a, b两个数组,使得a数组的所有元素都小于b数组的所有元素,此为完成一轮排列,

然后再将数组a,b各自再分成两个更小数组,使得两个更小数组之间的关系同a和b两个数组的关系一样,此为又完成一轮排列,

然后再对更小数组进行同样的划分,如此往复循环,多次细分数组,最终实现整个数组的所有元素实现有序排列。

5a6248719eab539b6cda4d7ca48f5a7b.png

在每一轮排列过程中需要三个变量:

key变量:一般初始化为arr[0], 即为后面被比较的关键值;

left变量:数组左边的下标,后面left++不断右移;

right变量:数组右边的下标,后面right--不断左移;

每轮排序过程如下:

步骤一:从数组下标right开始,自右向左(right--),逐一与key值比较,

如果发现arr[right]

步骤二:从数组下标left开始,自左向右(left++),逐一与key值比较,

如果发现arr[left]>key值,则arr[left]与arr[right]元素互换位置;

步骤三:重复以上两个步骤,直至left=right, 退出循环;

此时已完成一轮排序,并且分成a,b两个数组(小于key值的元素划分为a数组,大小key值的元素划分为b数组),

并且a数组的所有元素都小于b数组的所有元素。

重复以上排序过程(递归调用),直至所划分数组元素个数为1时退出循环,此时整个数组排序完成。

快速排序函数代码如下:a739ef1ba60c42f0cacc586144e75f71.png

public static void quikeSort(int arr[],int start,int end) {

// 快速排序函数

int key = arr[start];

int left = start;

int right = end;

while (left

while ((leftkey)) {

right--;

}

while ((left

left++;

}

if ((arr[left]==arr[right])&&(left

left++;

} else {

int temp = arr[left];

arr[left] = arr[right];

arr[right] = temp;

}

}

for (int i:arr) {

System.out.print(i+" ");

}

System.out.println();

if (left-1>start)quikeSort(arr,start,left-1);

if (right+1

//    return (arr);

}

public static void main(String[] args) {

int arr[] = {15,8,3,9,21,28,19,12};

int len = arr.length-1;

quikeSort(arr,0,len);

for (int i:arr) {

System.out.print(i+" ");

}

}5a6248719eab539b6cda4d7ca48f5a7b.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值