几种简单的排序算法(JAVA)

几种排序算法(JAVA)

一、代码

package com.hdwang;

import java.util.Arrays;

/**
 * Created by admin on 2017/1/20.
 */
public class Sort {

    /**
     * 冒泡排序(最小数冒泡),写错了!应该是相邻比较,大数沉底,小数冒泡!不是每个数与第一个比较!
     * @param array 数组
     */
    public void bubbleSort(int[] array){
        for(int i=0;i< array.length-1;i++){ //比多少次
            for(int j= i+1;j<array.length;j++){ //每次循环,将最小数提前
                if(array[i]>array[j]){ //小数冒泡
                    int tmp = array[i];
                    array[i] = array[j];
                    array[j] = tmp;
                }
            }
        }
    }

    /**
     * 选择排序(选择最小值置前,较冒泡排序空间占用多,速度快(少了交换))
     * @param array 数组
     */
    public void selectSort(int[] array){
        for(int i=0;i<array.length-1;i++){
            int minIndex = i;
            for(int j=i+1;j<array.length;j++){
               if(array[j]<array[minIndex]){
                   minIndex = j; //最小值位置
               }
            }
            //交换最小值与第i位的值
            if(minIndex != i){
                int tmp = array[minIndex]; //最小值
                array[minIndex] = array[i];
                array[i] = tmp;
            }
        }
    }

    /**
     * 插入排序(大数后移,小数插入前面,理论上比选择排序空间大,速度快)
     * @param array 数组
     */
    public void insertSort(int[] array){
        for(int i=1;i< array.length;i++){
            int tmp = array[i]; //暂存i位的元素,空出来
            int j = i;
            for(;j > 0 && tmp < array[j-1]; j--){  //前面的大数移到后面来
                    array[j] = array[j-1];
            }
            array[j] = tmp; //tmp插入准确位置
        }
    }

    /**
     * 快速排序(理论上比插入排序空间占用大,排序速度更快)
     * @param array 数组
     * @param lowIndex 低位索引
     * @param highIndex 高位索引
     */
    public void quickSort(int[] array,int lowIndex,int highIndex){
        if(lowIndex >= highIndex){
            return; //退出递归
        }
        int base = array[lowIndex]; //基准数(小的放其左边,大的放其右边)
        int low = lowIndex; //副本
        int high = highIndex; //副本
        while(low<high){
            while(low<high){  //从后面往前找到一个比base小的数,放到前面去(low的位置上去)
                if(array[high] < base){
                    array[low] = array[high];
                    low++;
                    break;
                }
                high--;
            }
            while(low<high){ // 从前面往后找到一个大于或等于base的数,放到后面去(high的位置上去)
                if(array[low] >= base){
                    array[high] = array[low];
                    high--;
                    break;
                }
                low++;
            }
        }
        array[low] = base; //low==high 结束

        quickSort(array,lowIndex,low-1); //递归排序前一段
        quickSort(array,low+1,highIndex); //递归排序后一段
    }

    public static void main(String[] args) {
        int[] array = {2,3,1,6,9,5,4,2};
        System.out.println(Arrays.toString(array));

        Sort sort = new Sort();
//        sort.bubbleSort(array);
//        sort.selectSort(array);
//        sort.insertSort(array);
        sort.quickSort(array,0,array.length-1);
        System.out.println(Arrays.toString(array));

    }
}

 二、输出结果

[2, 3, 1, 6, 9, 5, 4, 2]
[1, 2, 2, 3, 4, 5, 6, 9]

posted @ 2017-01-20 17:44  追极  阅读(380)  评论(0编辑  收藏  举报