zoukankan      html  css  js  c++  java
  • 快速排序二

    在划分的基础上进行快速排序:

    思路:递归调用快速排序(recQuickSort(left,right))方法,pivot选取节点right的值(改进时可以将pivot设置为数据项最左端,最右端,和中间值的平均值)

    if(left<=right)

       return;

    else {
      int pivot = arr[right];
      int position = partitionIt(left, right, pivot);
      recQuickSort(left, position - 1);
      recQuickSort(position + 1, right);
    }

    源代码:

    package com.quickSort;

    public class ArrayIns {

    private int nElems;
    private int[] arr;

    public ArrayIns(int max) {
    arr = new int[max];
    nElems = 0;
    }

    public int size() {
    return nElems;
    }

    public void insert(int value) {
    arr[nElems++] = value;
    }

    public void display() {
    for (int i = 0; i < nElems; i++)
    System.out.print("the" + i + "Elem is " + arr[i] + " ");
    }

    public void quickSort() {
    recQuickSort(0, nElems - 1);
    }

    public void recQuickSort(int left, int right) {
    if (right - left <= 0)
    return;
    else {
    int pivot = arr[right];
    int position = partitionIt(left, right, pivot);
    recQuickSort(left, position - 1);
    recQuickSort(position + 1, right);
    }
    }

    public int partitionIt(int left, int right, int pivot) {
    int leftPtr = left - 1;
    int rightPtr = right;

    while (true) {
    while (leftPtr < right && arr[++leftPtr] < pivot)
    ;
    while (rightPtr > left && arr[--rightPtr] > pivot)
    ;
    if (leftPtr >= rightPtr)
    break;
    else
    swap(leftPtr, rightPtr);
    }
    swap(leftPtr, right);
    return leftPtr;
    }

    public void swap(int leftValue, int rightValue) {
    int temp;
    temp = arr[rightValue];
    arr[rightValue] = arr[leftValue];
    arr[leftValue] = temp;
    }
    }

    package com.quickSort;

    public class QuickSort1App {
    public static void main(String[] args){
    int maxSize = 10;
    ArrayIns arr = new ArrayIns(maxSize);

    for(int i=0;i<maxSize;i++){
    int n = (int)(Math.random() * 99);
    arr.insert(n);
    }
    arr.display();
    System.out.println();
    arr.quickSort();
    arr.display();
    }
    }

  • 相关阅读:
    构建VIM下的C++编程环境
    [原]在Fedora 20环境下安装系统内核源代码
    [转]程序员技术练级攻略
    [原]Fedora 20安装记录
    【转】ODBC、OLE DB、 ADO的区别
    C# & SQL Server大数据量插入方式对比
    字符串散列函数示例
    [转]wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容)
    SOCKET:SO_LINGER 选项
    TCP三次握手与四次挥手
  • 原文地址:https://www.cnblogs.com/xunmengyoufeng/p/2712828.html
Copyright © 2011-2022 走看看