黑马程序员技术交流社区
标题:
快速排序算法
[打印本页]
作者:
straw
时间:
2013-7-15 07:45
标题:
快速排序算法
本帖最后由 straw 于 2013-7-15 11:46 编辑
* 快熟排序
1 快速排序 取中间作为断点 将左边比中间大的放到右边去
2 将右边比中间小的放到左边来
3 一次排序后记住原中间取值的位置作为新断点 分别递归走遍和右边的重新排序
谁有写过这个算法的?麻烦贴出来下啊...
作者:
周之浩
时间:
2013-7-15 08:27
这是我写的一个快速排序的算法,如果不明白时,可以给我发邮件
1553026118@qq.com
package com.itheima;
import java.util.Arrays;
/**
* 排序方法主要有:快速排序,冒泡排序,插入排序(直接,折半,二路),选择排序
* 本例实现快速排序
* @author Administrator
*
*/
public class Test2 {
public static void main(String[] args) {
int arr[] ={51,32,62,96,87,17,28};//定义数组
new Test2().quickSort(arr, 0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
/**
* 实现数组内两个数值交换
* @param a对应的数组
* @param i数组的下标
* @param j数组的下标
*/
public void change(int a[], int i, int j)
{
if(i==j)
{
return;
}
int tmp = a[i];//实现交换
a[i] =a[j];
a[j] = tmp;
}
/**
*
* @param arr 带排序的数组
* @param low
* @param height
* @return i
*/
public int partition(int arr[],int low,int height)
{
//当前位置为第一个元素所在位置
int p_pos = low;
//采用第一个元素为轴
int pivot = arr[p_pos];
for (int i = low + 1; i <= height; i++) {
if (arr[i] < pivot) {
p_pos++;
change(arr, p_pos, i);
}
}
change(arr, low, p_pos);
return p_pos;
}
/**
* 实现快速排序
* @param arr
* @param low
* @param high
*/
public void quickSort(int arr[], int low, int high)
{
if(low < high)
{
int pivot = partition(arr, low, high);
//System.out.println(pivot);
quickSort(arr, low, pivot-1);
quickSort(arr, pivot+1, high);
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2