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

    基于上篇博客最后的思路做以修改

    package com.quickSort2;

    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){
    int size=right - left + 1;
    if(size<=3)
    manulSort(left,right);
    else{
    int median = medianOf3(left,right);
    int position = partitionIt(left, right, median);
    recQuickSort(left, position - 1);
    recQuickSort(position + 1, right);
    }

    }

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

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


    public int medianOf3(int left,int right){

    int center = (right + left) / 2;
    if(arr[left] > arr[center])
    swap(left,center);

    if(arr[left] > arr[right])
    swap(left,right);

    if(arr[center] > arr[right])
    swap(center,right);

    swap(center,right-1);
    return arr[right-1];



    }

    public void manulSort(int left,int right){
    int size = right - left +1 ;
    if(size<=1)
    return;
    else if(size == 2){
    if(arr[left] > arr[right]){
    swap(left,right);
    }
    return;

    }
    else{
    if(arr[left] > arr[right])
    swap(left,right);
    if(arr[left] > arr[right - 1])
    swap(left,right -1);
    if(arr[right-1] > arr[right])
    swap(right -1,right);
    }



    }

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

    package com.quickSort2;

    public class QuickSort2App {
    public static void main(String[] args) {
    int maxSize = 19;
    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();
    }
    }

  • 相关阅读:
    mysql安装停在make[3]: Leaving directory `/mysql5.xx/mysqltest' 解决方法
    搞了个burst
    PKU2074
    PKU2029
    ACM/ICPC要求的知识点(转)
    PKU3264线段树解法
    PKU2036
    PKU1151线段树解法
    今天递了辞呈
    hamachi
  • 原文地址:https://www.cnblogs.com/xunmengyoufeng/p/2713271.html
Copyright © 2011-2022 走看看