快速排序算法

快速排序算法和冒泡排序算法类似,都是基于交换排序思想的,快速排序算法对冒泡排序算法进行了改进,从而具有更高的执行效率
通过多次比较和交换来实现排序,流程如下:
1)首先设定一个分界值,通过该分界值将数组分成左右两部分
2)将大于等于分界值得数据集中到数组右边,小于分界值得数据集中到数组的左边。此时,左边部分中各元素都小于等于分界值,而右边部分中各元素都大于等于分界值
3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样将左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理
4)重复上述过程,可以看出,这是一个递归定义。

例如:选择8个整型数据69、62、89、37、97、17、28、49是一组无序数据
1)首先选取一个分界值,这里选择第一个数据69作为分界值。在变量left中保存数组的最小的序号0,在变量right中保存数据的最大序号7,在变量base中保存分界值69
2)从数组右侧开始,逐个取出数据与分界值69比较,直到找到比base小的数据为止,数组最右侧的元素A[right]的值49比base变量保存的值69小。
3)将右侧比基准base小的数保存到A[left]元素中。
4)接下来,从数组左侧开始,逐个取出元素与分界值69比较,直到找到比分界值69大的数据为止。数组最左侧的元素A[left]的值为49,比base的值小,将left自增1再取A[left]的值62与base的值69比较,62小于69,继续将left自增1.再取A[left]的值89与base比较,89大于69,结束查找
5)将左侧比分界值69大的数保存到A[right]元素中。
6)将分界值69中的值保存到A[left]中,最后得到结果



public class QuickSort {
static final int SIZE=18;
static void quickSort(int[] arr,int left,int right) //快速排序算法
{
int f,t;
int rtemp,ltemp;

ltemp=left;
rtemp=right;
f=arr[(left+right)/2]; //分界值
while(ltemp<rtemp)
{
while(arr[ltemp]<f)
{
++ltemp;
}
while(arr[rtemp]>f)
{
--rtemp;
}
if(ltemp<=rtemp)
{
t=arr[ltemp];
arr[ltemp]=arr[rtemp];
arr[rtemp]=t;
--rtemp;
++ltemp;
}
}
if(ltemp==rtemp)
{
ltemp++;
}

if(left<rtemp)
{
quickSort(arr,left,ltemp-1); //递归调用
}
if(ltemp<right)
{
quickSort(arr,rtemp+1,right); //递归调用
}
}
public static void main(String[] args)
{
int[] shuzu=new int[SIZE];
int i;

for(i=0;i<SIZE;i++)
{
shuzu[i]=(int)(100+Math.random()*(100+1)); //初始化数组
}

System.out.print("排序前的数组为:\n"); //输出排序前的数组
for(i=0;i<SIZE;i++)
{
System.out.print(shuzu[i]+" ");
}
System.out.print("\n");

quickSort(shuzu,0,SIZE-1); //排序操作

System.out.print("排序后的数组为:\n");
for(i=0;i<SIZE;i++)
{
System.out.print(shuzu[i]+" "); //输出排序后的数组
}
System.out.print("\n");

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值