快速排序算法
来源:互联网 发布:sublimetext3 mac 编辑:程序博客网 时间:2024/06/05 11:30
算法实现:
取待排序的第一个数为基数,找出它在整个区间的最终位置,找到它后,把整个区间分成两个子区间,
使得前面区间比它小,后面区间比它大。
遵循上述方法对各小区间进行同样的操作,直到各小区间只剩一个数,快速排序结束。
具体过程如下:
原始数列 8 4 12 6 1 5 10 由小到大快速排序
初始: 8 4 12 6 1 5 10 这里以8为基数 8下标为i 最后一个数10下标为j
第一趟 : 5 4 12 6 1 8 10 由上看出8和10比较,10大,不交换 从10开始往左边选数和基数8比较, 找到5和 8比,8大,交换 换过之后,从5开始往右选数与基数8比较
5 4 8 6 1 12 10 由上看出4和8比较不换 12和8比较,12大,交换 8就去到了前面。这个时候从12开始往左边选数与基数8比较
5 4 1 6 8 12 10 由上看出 1和8 比较 8大 交换 8去后面,1去前面。 然后从1开始往右选数与基数8比较 6比8小,不换
[5 4 1 6] 8 [12 10] 第一趟排序结束 以8为基数 把数列分为两个区间。再对两个区间分别使用这种方法排序
直到每个区间被分的只剩下一个数,快速排序结束。
所以这里就用到了递归。
具体实现如下:
package com.sort;/* * 快速排序算法 * num[]待排序数组 * * * */public class QuickSort {//对从num[L]到num[R]的元素进行排序public static void quickSort(int num[],int l,int r){int temp;//用来保存基准数int i=l,j=r;if(l<r){temp=num[l];while(i!=j){//判断排序是否结束while(j>i && num[j]>temp){//从右边往左扫描,找到一个小于temp的元素--j;}if(i<j){ num[i]=num[j];/*找到后放在temp的左边,下标右移一位*/i++;}while(j>i && temp>num[i]){//从左往右扫描,找到一个大于temp的元素i++;}if(i<j){num[j]=num[i]; /*找到后放在temp的右边,下标左移一位*/j--;}}num[i]=temp;//将temp放在最终位置quickSort(num, l, i-1);//递归对temp左边元素排序quickSort(num, i+1, r);//递归对temp又边元素排序}}public static void main(String[] args) {int[] num={2,3,4234,4,52,12,1212,32442};quickSort(num,0,7);for(int i=0;i<num.length;i++){System.out.println(num[i]);}}}
阅读全文
0 0
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- java语言的概述
- java中的快速失败(fail-fast)与安全失败(fail-safe)
- 基于MATLAB的PCA人脸识别实现
- tomcat目录结构及配置文件说明
- R Notes
- 快速排序算法
- 前端基础练习题
- Django查询数据
- JVM
- Sum All Numbers in a Range
- ExtJs内的Ext.form.Panel中datefield控件选择日期过后的事件监听select以及比较两个时间的大小
- 用enum代替int常量。
- 腾讯云服务器安装jdk和tomcat(ubuntu系统)
- wamp环境下MySQL配置主从复制