快速排序


package com.wlh;

public class QuickSort {

public static void qucikpass(int[] r, int left, int right) {
int i, j;
int middle;
i = left;
j = right;
middle = r[i];
while (i < j) {
//从右向左找小于middle的数组值
while (r[j] >= middle && i < j)
j--;
//i和j没有碰到一起
if (i < j) {
//从右向左找到小于middle的数组值,然后r[i]位置上的数组值被其替换
r[i] = r[j];
i++;
//从左向右找大于middle的数组值
while (r[i] <= middle && i < j)
i++;
if (i < j) {
//从左向右找大于middle的数组值,然后r[j]位置上的数组值被其替换
r[j] = r[i];
j--;
}
}
}

//i==j时,此时数组下标所指的位置就是middle该去的位置,将middle放入该位置,
//此时r[i]左边的数组值都小于r[i],右边的都大于r[i]
r[i] = middle;//第一躺排序

//递归调用次函数,对r[i]左边的数组进行排序
if (left < i) {
qucikpass(r, 0, i);
}

//递归调用次函数,对r[i]右边的数组进行排序
if (right > j) {
qucikpass(r, j +1, right);
}
}

public static void main(String[] args) {

//int[] pData = new int[] { 35, 40, 45, 10, 15 };
int[] pData = new int[10];
for (int i = 0; i < 10; i++){
pData[i] = (int) (Math.random() * 100);
System.out.print(pData[i] + " ");
}
System.out.println("\n======================== ");
QuickSort.qucikpass(pData, 0, pData.length - 1);
for (int i = 0; i < pData.length; i++)
System.out.print(pData[i] + " ");
}
}



[color=red]低效率算法:[/color]

package com.wlh;

public class QuickSort3 {

public static void qucikpass(int[] r, int left, int right) {
int i, j;
int middle,temp;
i = left;
j = right;
middle = r[i];
while (i < j) {
//从右向左找小于middle的数组值
while (r[j] >= middle && i < j)
j--;
//i和j没有碰到一起
if (i < j) {
//从右向左找到小于middle的数组值,然后r[i],r[j]位置上的数组值交换
temp=r[i];
r[i] = r[j];
r[j]=temp;
i++;
//从左向右找大于middle的数组值
while (r[i] <= middle && i < j)
i++;
if (i < j) {
//从左向右找大于middle的数组值,然后r[i],r[j]位置上的数组值交换
temp=r[i];
r[i] = r[j];
r[j]=temp;
j--;
}
}
}


//递归调用次函数,对r[i]左边的数组进行排序
if (left < i) {
qucikpass(r, 0, i);
}

//递归调用次函数,对r[i]右边的数组进行排序
if (right > j) {
qucikpass(r, j +1, right);
}
}

public static void main(String[] args) {

//int[] pData = new int[] { 35, 40, 45, 10, 15 };
int[] pData = new int[10];
for (int i = 0; i < 10; i++){
pData[i] = (int) (Math.random() * 100);
System.out.print(pData[i] + " ");
}
System.out.println("\n======================== ");
QuickSort3.qucikpass(pData, 0, pData.length - 1);
for (int i = 0; i < pData.length; i++)
System.out.print(pData[i] + " ");
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值