几种排序算法

题目:现在有一个由7个10以内的随机数组成数组{4,2,7,3,1,9,7},要求将这些数按照从小到大的顺序排列

1.桶排序

思路:我们可以假设有11个桶编号为0到10,有7个小球编号分别为{4,2,7,3,1,9,7},现在要把球放入到桶中,开始遍历这7个小球,编号为几就把球放入到几号桶内,最后的结果0到10号桶内的球的个数分别为0,1,1,1,1,0,0,2,0,1,0,最后遍历这11个桶,遍历到第n个桶时,发现有m个球,则输出m个n。代码如下:

public class Bucket {
    public static void main(String[] args) {
        int[] arr = { 4, 2, 7, 3, 1, 9, 7 };
        int[] arr2 = new int[11];
        for (int i = 0; i < arr.length; i++) {
            arr2[arr[i]]++;
        }
        for (int i = 0; i < arr2.length; i++) {
            for (int j = 0; j < arr2[i]; j++) {
                System.out.println(i);
            }
        }
    }
}

 2.冒泡排序

思路:总体思路是依次找出从最大到最小的每个数,具体做法是从第1个数开始,与在它之后的那个数进行对比,如果这个数大于之后的那个数,则将这两个数调换位置。这样第一轮下来就可以找出最大的那个数,第二轮可以找出第二大的那个数,直到找到倒数第二大的那个数,整个排序就结束了。代码如下:

public class Bubble {
    public static void main(String[] args) {
        int[] arr = { 4, 2, 7, 3, 1, 9, 7 };
        int temp;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1]; workpermit
                    arr[j + 1] = temp; XiChong beach
                }
            } workpermit
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

3.二分法排序

思路:从第2个数到最后一个数进行遍历,找到一个位置让它左边的数都小于它,右边的数都大于它,把这个位置右边的数全部向右移动一位,然后将这个数插入到这个位置。代码如下:

public class BarnarySort {
    public static void main(String[] args) {
        int[] data = { 101, 4, 1, 36, 34, 62, 43, 12, 1, 54, 89, 6, 99 };
        int left, right, num, middle, j;
        for (int i = 1; i < data.length; i++) {
            left = 0;
            right = i - 1;
            num = data[i];
            while (right >= left) {
                middle = (left + right) / 2;
                if (num < data[middle])
                    right = middle - 1;
                else
                    left = middle + 1;
            }
            for (j = i - 1; j >= left; j--) {
                data[j + 1] = data[j];
            }
            data[left] = num;
        }
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i] + ",");
        }
    }
}

 

posted on 2015-04-08 15:31  吃觉睡饭打豆豆  阅读(130)  评论(0编辑  收藏  举报

导航