排序基础算法汇总-java实现

package com.ldm.test;

import java.util.Random;

public class BubbleSortTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        BubbleSortTest test = new BubbleSortTest();
//        test.bubbleSort(test.creatArray(20), "asc");
//        test.selectSort(test.creatArray(20), "desc");
//        test.InsertSort(test.creatArray(20), "desc");
        test.quickSort(test.creatArray(20), "asc");
        test.quickSort(test.creatArray(20), "desc");
    }

    /**
     *
     * @param n
     * @return
     */
    public int[] creatArray(int n) {
        Random random = new Random();
        int[] array = new int[n];
        for (int i = 0; i < n; i++) {
            array[i] = random.nextInt(100) - random.nextInt(100);
        }
        System.out.println("=========原始序列=======");
        printArray(array);
        return array;
    }

    /**
     *
     * @param data
     */
    public void printArray(int[] data) {
        for (int i : data) {
            System.out.print(i + " ");
        }
        System.out.println();
    }

    /**
     *
     * @param data
     * @param x
     * @param y
     */
    private void swap(int[] data, int x, int y) {
        int temp = data[x];
        data[x] = data[y];
        data[y] = temp;
    }

    /**
     * 冒泡排序
     * @param data
     * @param sortType
     */
    public void bubbleSort(int[] data, String sortType) {
        if (sortType.equals("asc")) {
            for (int i = 1; i < data.length; i++) {
                for (int j = 0; j < data.length - i; j++) {
                    if (data[j] > data[j + 1]) {
                        swap(data, j, j + 1);
                    }
                }
            }
        } else if (sortType.equals("desc")) {
            for (int i = 1; i < data.length; i++) {
                for (int j = 0; j < data.length - i; j++) {
                    if (data[j] < data[j + 1]) {
                        swap(data, j, j + 1);
                    }
                }
            }
        } else {
            System.out.println("您输入的排序类型错误。");
        }
        printArray(data);
    }
   
    /**
     * 选择排序
     * @param data
     * @param sortType
     */
    public void selectSort(int[] data, String sortType) {
        if (sortType.equals("asc")) {
            for (int i = 1; i < data.length; i++) {
                int index = 0;
                for (int j = 1; j <= data.length - i; j++) {
                    if (data[j] > data[index]) {
                        index = j;
                    }
                }
                swap(data, index, data.length - i);
            }
        } else if (sortType.equals("desc")) {
            for (int i = 1; i < data.length; i++) {
                int index = 0;
                for (int j = 1; j <= data.length - i; j++) {
                    if (data[j] < data[index]) {
                        index = j;
                    }
                }
                swap(data, index, data.length - i);
            }
        } else {
            System.out.println("Error sort type");
        }
        printArray(data);
    }
   
    /**
     * 插入排序
     * @param data
     * @param sortType
     */
    public void InsertSort(int[] data,String sortType){
        if(sortType.equals("asc")){
            for(int i=1;i<data.length;i++){
                for(int j=0;j<=i;j++){
                    if(data[i]<data[j]){
                        swap(data, i, j);
                    }
                }
            }
        }else if(sortType.equals("desc")){
            for(int i=1;i<data.length;i++){
                for(int j=0;j<i;j++){
                    if(data[i]>data[j]){
                        swap(data, i, j);
                    }
                }
        }
    }else{
        System.out.println("Error Sort Type");
        }
    printArray(data);
    }
   
    /**
     *
     * @param data
     * @param low
     * @param high
     */
    private void quickSort_asc(int data[],int low,int high){
        int i,j,x;
        if(low<high){
            i=low;
            j=high;
            x=data[i];
            while(i<j){
                //从右往左找比x小的数
                while(i<j&&data[j]>x){
                    j--;
                }
                if(i<j){
                    data[i]=data[j];
                    i++;
                }
                //从左往右找比x大的数
                while(i<j&&data[i]<x){
                    i++;
                }
                if(i<j){
                    data[j]=data[i];
                    j--;
                }
            }
            data[i]=x;
            quickSort_asc(data,low,i-1);
            quickSort_asc(data, i+1, high);
        }
    }
    /**
     *
     * @param data
     * @param low
     * @param high
     */
    private void quickSort_desc(int data[],int low,int high){
        int i,j,x;
        if(low<high){
            i=low;
            j=high;
            x=data[i];
            while(i<j){
                //从右往左找比x小的数
                while(i<j&&data[j]<x){
                    j--;
                }
                if(i<j){
                    data[i]=data[j];
                    i++;
                }
                //从左往右找比x大的数
                while(i<j&&data[i]>x){
                    i++;
                }
                if(i<j){
                    data[j]=data[i];
                    j--;
                }
            }
            data[i]=x;
            quickSort_desc(data,low,i-1);
            quickSort_desc(data, i+1, high);
        }
    }
   
    /**
     * 快速排序
     * @param data
     * @param sortType
     */
    public void quickSort(int data[],String sortType){
        if(sortType.equals("asc")){
            quickSort_asc(data, 0, data.length-1);
        }else if(sortType.equals("desc")){
            quickSort_desc(data, 0, data.length-1);
        }else{
            System.out.println("Error Sort Type");
        }
        printArray(data);
    }
}
 

你可能感兴趣的:(java,排序,冒泡排序,快速排序,选择排序)