java排序算法

冒泡排序:

        冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

 /**
     * 冒泡排序,比较相邻的两个元素,如果第一个比第二个大就交换
     * 对每一对相邻的元素做相同的工作
     *
     * @param numbers
     */
    private void bubbleSort(int[] numbers) {
        for (int i = 0; i < numbers.length - 1; i++) {
            for (int j = 0; j < numbers.length - 1 - i; j++) {
                if (numbers[j] > numbers[j + 1]) {//交换位置
                    int temp = numbers[j];
                    numbers[j] = numbers[j + 1];
                    numbers[j + 1] = temp;
                }
            }
        }
        for (int i = 0; i < numbers.length; i++) {
            System.out.print("排序后结果 "+numbers[i] + " ");
        }
    }

    快速排序:

            快速排序的基本思想: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。

  private void quick(int[] nums) {
        if (nums.length > 0) {
            quickSort(nums, 0, nums.length - 1);
        }
    }

    /**
     * 递归形式的分治排序算法
     *
     * @param numbers
     */
    private void quickSort(int[] numbers, int low, int high) {
        if (low < high) {
            int middle = getMiddle(numbers, low, high);
            quickSort(numbers, low, middle - 1);//对低字段表进行递归排序
            quickSort(numbers, middle + 1, high);//对高字段表进行递归排序
        }
    }


    /**
     * @param nums 待排序数组
     * @param low  起始位置
     * @param high 结束位置
     * @return 中轴
     */
    private int getMiddle(int[] nums, int low, int high) {
        int temp = nums[low];//数组的第一个作为中轴
        while (low < high) {
            while (low < high && nums[high] > temp) {
                high--;
            }
            nums[low] = nums[high];//比中轴小的记录到低端
            while (low < high && nums[low] < temp) {
                low++;
            }
            nums[high] = nums[low];//比中轴大的记录到高端
        }
        nums[low] = temp;
        return low;
    }

    选择排序:

            基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

 /**
     * 在未排序序列中找到最小的元素,放到排序队列起始位置
     * 再从剩余未排序队列中继续寻找最小元素,然后放到排序队列末尾
     * 直到所有元素排序完毕
     * @param nummbers
     */
    private void selectedSort(int[] nummbers) {
        int size = nummbers.length;
        int temp = 0;
        for (int i = 0; i < size - 1; i++) {
            int k = i;//待确定位置
            //选择出应该在第一个位置的数
            for (int j = size - 1; j > i; j--) {
                if (nummbers[j] < nummbers[k]) {
                    k = j;
                }
            }
            //交换2个数
            temp = nummbers[i];
            nummbers[i] = nummbers[k];
            nummbers[k] = temp;
        }
        for (int i = 0; i < nummbers.length; i++) {
            System.out.print("选择排序" + nummbers[i] + "  ");
        }
    }

你可能感兴趣的:(android笔记)