首页 > 代码库 > 常见排序__总结

常见排序__总结

文章来自:http://www.iteye.com/topic/1129454

一、概括

 

技术分享

1.冒泡排序

(1)基本思想:在一个序列元素中,比较相邻的两个数,如果相邻的数的顺序与想要输出的顺序相反就要进行交换,到序列末尾有序列中的最大值或者最小值在数组的一端。

(2)实例:

技术分享

(3)优缺点

(4)性质

(5)Java代码实现

 

package sorts;

public class 冒泡排序 {
    public static void main(String[] args) {
        int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
        changeSort(a);
    }

    private static void changeSort(int[] a) {
        int temp;
        for(int i=0; i<a.length; i++){
            for(int j=i+1; j<a.length; j++){
                if(a[i]>a[j]){
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
        for(int k=0; k<a.length; k++)
            System.out.println(a[k]);
    }
}

2.快速排序

(1)基本思想:

1.选择一个哨兵(序列中的第一个元素),序列中有两个标识元素分别指向序列的头部和尾部,两标识分别向中间归拢;

2.首先从序列末尾开始找小于哨兵的元素,找到元素和低位指针所指元素进行交换;

3.然后再从左向中找大于哨兵的元素然后交换高位指针所指向的元素;

4.循环以上的步骤,直到两个指针标识碰头完成一次排序;

5.然后再递归,被分开的子序列进行同样的操作。直到子序列中只剩下两个元素,停止递归,完成排序。

(2)实例:

技术分享

(3)优缺点

(4)性质

(5)Java代码实现

package sorts;

public class 快速排序 {
    public static void main(String[] args) {
        int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
        quick(a);
        for(int i=0; i<a.length;i++){
            System.out.println(a[i]);
        }
    }
    
    private static void quick(int[] a2) {
        //查看数组是否为空
        if(a2.length>0){
            _quickSort(a2,0,a2.length-1);
        }
    }
    //递归对子序列进行排序
    private static void _quickSort(int[] list, int low, int high) {
        if(low<high){
            int middle = getMiddle(list,low,high);
            _quickSort(list,low,middle-1);
            _quickSort(list,middle+1,high);
        }
    }

    private static int getMiddle(int[] list, int low, int high) {
        int tmp = list[low];
        while(low<high){
            while(low<high && list[high]>=tmp){
                high--;
            }
            list[low] = list[high];
            while(low<high && list[low] <= tmp){
                low++;
            }
            list[high]=list[low];
        }
        list[low]=tmp;
        return low;
    }
    
}

 

常见排序__总结