快速排序示范-从小到大 关键操作“记录下标,使用递归”

作者 : 开心源码 本文共1670个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共196人阅读

? ??????快速排序分析:关于数组下标的操作问题,肯定要注意条件循环变量的初始值设置以及循环结束条件的判定,注意条件结构的多变量控制,有时候这很绕,比较吃熟练度,所以要多训练。才能使循环有效,避免数组越界等问题出现。

? ? ? ? ? ? ? ? ? ? ? ? ? 快速排序的一趟操作效果(方法体)是:1.把传入数组分成三部分,第一部分是一个子数组(传入数组的一部分呵),第二部分是一个数,第三部分还是一个子数组,这个数叫做中间数,既然这么个叫法,那么你一定能了解中间数的左边数组也就是第一部分的所有数组元素都是小于或者者等于这个中间数的,第二部分的所有数组元素都大于等于这个中间数的。2.接着分别让第一部分和第三部分子数组作为新的传入数组分别调用方法本身,即便用递归。这个递归结束的标志呢,就是当传入的数组是个单元素数组(数组只包含一个元素,当然就不需要排序了啊)的时候就中止了,这样一来原来的数组元素已经一律排序完毕。

我个人代码实现,注释说明:

public class QuickSort {

public static void quickSort(int[] array,int startIndex,int endIndex) {//准备传入 数组,首元素下标,尾元素下标

if(startIndex<endIndex) {//单元素数组就中止操作,由于不需要排序

int LR=startIndex+1,RL=endIndex;//记录数组元素下标的两个变量

while(true) {

for(int i=startIndex+1;i<=endIndex;i++) {//记录从左到右第一个大于等于首元素的下标

if(array[i]>=array[startIndex]) {

LR=i;

break;

}

LR++;

}

for(int j=endIndex;j>=startIndex+1;j–) {//记录从右到左第一个小于等于首元素的下标

if(array[j]<=array[startIndex]) {

RL=j;

break;

}

RL–;

}

if(LR<RL) {//若记录大于等于首元素的下标值 小于 记录小于等于首元素的下标值? 那么这两个下标代表的元素值交换,接着循环

int temp=array[LR];

array[LR]=array[RL];

array[RL]=temp;

}else {

break;

}

}

if(LR>=RL) {//若记录大于等于首元素的下标值 大于 记录小于等于首元素的下标值 那么将记录小于等于首元素的下标代表的元素值与首元素值交换

int temp=array[RL];//,此时首元素值变成中间数,中间数左边是一子数组,右边是另一子数组

array[RL]=array[startIndex];

array[startIndex]=temp;

quickSort(array,startIndex,RL-1);//中间数左子数组(用三个传入参数表示)作为参数调用方法本身,即便用递归

quickSort(array,RL+1,endIndex);//中间数右子数组(用三个传入参数表示)作为参数调用方法本身,即便用递归

}

}

}

public static void main(String[] args) {

int[] array= {26,17,5,33,87,53,27,49,28,78};// TODO Auto-generated method stub

System.out.println(“排序前:”);

for(int i=0;i<array.length;i++)

System.out.print(array[i]+” “);

System.out.println();

quickSort(array,0,array.length-1);

System.out.println(“排序后:”);

for(int i=0;i<array.length;i++)

System.out.print(array[i]+” “);

}

}

运行结果:

排序前:

26 17 5 33 87 53 27 49 28 78

排序后:

5 17 26 27 28 33 49 53 78 87

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 快速排序示范-从小到大 关键操作“记录下标,使用递归”

发表回复