Chinaunix首页 | 论坛 | 博客
  • 博客访问: 565773
  • 博文数量: 136
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1343
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 23:18
文章分类

全部博文(136)

文章存档

2011年(28)

2009年(60)

2008年(48)

我的朋友

分类: Java

2008-11-22 18:49:48

 

/**
 * JAVA排序算法实现代码-快速(Quick Sort)排序。
 *
 * @author 老紫竹 JAVA世纪网(java2000.net)
 *
 */

public class Test {
  public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 预设数据数组


  public static void main(String args[]) {

    System.out.print("排序前: ");
    for (int i = 0; i < a.length; i++)
      System.out.printf("%3s", a[i]);

    System.out.println("");

    int Index = a.length;

    QuickSort(0, Index - 1, Index); // 快速排序


    // 排序后结果

    System.out.print("排序后: ");
    for (int i = 0; i < a.length; i++)
      System.out.printf("%3s", a[i]);

    System.out.println("");
  }

  public static void QuickSort(int Left, int Right, int Index) {
    int i, j, k; // 循环计数变量

    int Pivot; // 枢纽变量

    int Temp; // 暂存变量


    i = Left; // 设定左指针

    j = Right; // 设定右指针


    Pivot = a[Left]; // 取最左边的元素


    if (i < j) {
      do {
        while (a[i] <Pivot && i < Right) // 从左往右找比Pivot大的值

        {
          i++;
        }
        while (a[j] > Pivot && j > Left) // 从右往左找比Pivot小的值

        {
          j--;
        }

        if (i < j) // 交换a[i]和a[j]

        {
          Temp = a[i];
          a[i] = a[j];
          a[j] = Temp;
        }
      } while (i < j);
      if (i > j) {
        Temp = a[Left]; // 交换a[Left]和a[j]

        a[Left] = a[j];
        a[j] = Temp;

        // 打印目前排序结果


        System.out.print("排序中: ");
        for (k = 0; k <= Index; k++) {
          System.out.printf("%3s", a[k]);
        }
        System.out.println("");
      }
      QuickSort(Left, j - 1, Index); // 排序左半边

      QuickSort(j + 1, Right, Index); // 排序右半边

    }
  }
}

 

运行结果
排序前: 10 32 1 9 5 7 12 0 4 3
排序后: 0 1 3 4 5 7 9 10 12 32

阅读(1206) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~