黑马程序员技术交流社区

标题: 快速排序算法 [打印本页]

作者: straw    时间: 2013-7-15 07:45
标题: 快速排序算法
本帖最后由 straw 于 2013-7-15 11:46 编辑

* 快熟排序
1  快速排序  取中间作为断点 将左边比中间大的放到右边去
2  将右边比中间小的放到左边来
3  一次排序后记住原中间取值的位置作为新断点  分别递归走遍和右边的重新排序
谁有写过这个算法的?麻烦贴出来下啊...

作者: 周之浩    时间: 2013-7-15 08:27
这是我写的一个快速排序的算法,如果不明白时,可以给我发邮件1553026118@qq.com
  1. package com.itheima;

  2. import java.util.Arrays;

  3. /**
  4. * 排序方法主要有:快速排序,冒泡排序,插入排序(直接,折半,二路),选择排序
  5. * 本例实现快速排序
  6. * @author Administrator
  7. *
  8. */
  9. public class Test2 {
  10.     public static void main(String[] args) {
  11.             int arr[] ={51,32,62,96,87,17,28};//定义数组
  12.         new Test2().quickSort(arr, 0,arr.length-1);
  13.         System.out.println(Arrays.toString(arr));
  14.         }
  15.    
  16.     /**
  17.      * 实现数组内两个数值交换
  18.      * @param a对应的数组
  19.      * @param i数组的下标
  20.      * @param j数组的下标
  21.      */
  22.     public void change(int a[], int i, int j)
  23.     {
  24.             if(i==j)
  25.             {
  26.                     return;
  27.             }
  28.             int tmp = a[i];//实现交换
  29.             a[i] =a[j];
  30.             a[j] = tmp;
  31.     }
  32.    
  33.     /**
  34.      *
  35.      * @param arr 带排序的数组
  36.      * @param low
  37.      * @param height
  38.      * @return i
  39.      */
  40.     public int partition(int arr[],int low,int height)
  41.     {
  42.               //当前位置为第一个元素所在位置
  43.         int p_pos = low;
  44.         //采用第一个元素为轴
  45.         int pivot = arr[p_pos];
  46.          
  47.         for (int i = low + 1; i <= height; i++) {

  48.             if (arr[i] < pivot) {            
  49.                
  50.                 p_pos++;

  51.                 change(arr, p_pos, i);  

  52.             }

  53.         }

  54.         change(arr, low, p_pos);

  55.         return p_pos;

  56.     }
  57.     /**
  58.      * 实现快速排序
  59.      * @param arr
  60.      * @param low
  61.      * @param high
  62.      */
  63.     public void quickSort(int arr[], int low, int high)
  64.     {
  65.             if(low < high)
  66.             {
  67.                     int pivot = partition(arr, low, high);
  68.                     //System.out.println(pivot);
  69.                     quickSort(arr, low, pivot-1);
  70.                     quickSort(arr, pivot+1, high);
  71.             }
  72.     }
  73.    
  74. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2