快速排序 java代码_java实现快速排序

一:快速排序的特征

1:冒泡排序的改进

2:内部交换数据

3:分治+递归的思想

4:稳定排序

5:时间复杂度为:O(n*logn)

二:算法的整体思路

1:原始数据:12 11 6 87 23 8 54

2:第一次定义  key=12  以key值为参考

3:第一趟交换后大致为: 86 11 12 54 87 23(把比12小的交换到左边,大的交换到右边)

4:根据以上的思想:把左边和右边的数据分别看着一组数据

左边的数据: 8 6 11

key=8

第一趟比较后可以得出:6811   (比key小的放左边,大的放右边)

5:右边的数据:54 87 23

key=54

第一趟比较后可以得出:23 54 87

......................................................

按照如上的思想:递归的执行就可以得到升序的数据.

三:程序设计思想

1:定义key值

2:定义左边指针left、右边指针 right

3:右边->左边遍历:如果当前的值比key值小,右边和左边交换

4:左边->右边遍历:如果左边的值比key大,左边和右边交换

5:当左边的指针和右边的指针指向同一个地址,遍历终止

6:递归调用

四:代码实现如下:

package basic.suanfa;

/**

* java版快速排序

* @author zl

*

*/

public class KuaiPaiZl {

public void qSort(int[] A,int start,int end){

//递归终止条件

if(start>=end)

return;

//设置变量

int key=A[start];//将数组的第一个值设置为Key值

//设置指针变量,从左边----向右移动

int pointRight=start;

//设置指针变量,从右边--向左移动

int pointLeft=end;

//交换数据的桥梁变量

int temp;

//开始循环

while(start!=end){

//从右边->左找一个比:key值小的数

//如果没有找到比:key小的值,指针向:右边移动

while((start!=end)&&A[pointLeft]>key){

pointLeft--;

}

//如果遍历完整个数组都未找到:就说明key值右边的值已经都比他大了

if(pointLeft==pointRight)

break;

//找到比key小的数,进行交换

temp=A[pointLeft];

A[pointLeft]=A[pointRight];

A[pointRight]=temp;

pointRight++;

//从左边->右边找一个比key大的数

while((start!=end)&&A[pointRight]

pointRight++;

}

if(pointRight==pointLeft)break;

//找到比key大的数,进行交换

temp=A[pointRight];

A[pointRight]=A[pointLeft];

A[pointLeft]=temp;

pointLeft--;

}

//递归调用

qSort(A, start, pointRight-1);

qSort(A, pointRight+1, end);

}

//测试函数

public static void main(String[] args){

int[] A={15,8,7,9,3,5,6,4,7,10,41,50,27,10};

KuaiPaiZl kp=new KuaiPaiZl();

kp.qSort(A, 0, A.length-1);

System.out.println("排好序的数组为:");

for(int i=0;i

System.out.println(A[i]+"\t");

}

}

}

ps:在算法中陶醉....

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值