臭皮匠排序

十大经典排序算法

冒泡排序
选择排序
插入排序
快速排序
归并排序
堆排序
桶排序
基数排序
希尔排序
计数排序

臭皮匠排序(Stooge Sort)是一种低效的递归排序算法,实现步骤如下:

  • 在排序区间内如果最后一个值小于第一个值,则交换这两个数。
  • 如果当前区间元素数量大于等于 3 :
    • 使用臭皮匠排序法递归排序前 2/3 的元素。
    • 使用臭皮匠排序法递归排序后 2/3 的元素。
    • 再次使用臭皮匠排序法递归排序前 2/3 的元素。

private void stoogeSort(int[] nums) {
    stoogeSort(nums, 0, nums.length - 1);
}

private void stoogeSort(int[] nums, int left, int right) {
    if (nums[left] > nums[right])// 如果最后一个值小于第一个值,则交换这两个数
        swap(nums, left, right);
    if (right - left + 1 >= 3) {// 如果当前集合元素数量大于等于3,执行下面操作
        int third = (right - left + 1) / 3;
        stoogeSort(nums, left, right - third);// 使用臭皮匠排序法排序前2/3的元素
        stoogeSort(nums, left + third, right);// 使用臭皮匠排序法排序后2/3的元素
        stoogeSort(nums, left, right - third);// 再次使用臭皮匠排序法排序前2/3的元素
    }
}

private void swap(int[] nums, int i, int j) {
    int tmp = nums[i];
    nums[i] = nums[j];
    nums[j] = tmp;
}

相关链接

所有排序算法
冒泡排序选择排序插入排序快速排序归并排序堆排序桶排序基数排序希尔排序计数排序位图排序拓扑排序二叉树排序Bogo排序睡眠排序鸡尾酒排序侏儒排序臭皮匠排序图书馆排序珠排序链表排序鸽巢排序奇偶排序慢速排序耐心排序梳排序煎饼排序插值排序

信奥赛编程(刷题请进)>>>

经过两年的打磨,我的新作《算法秘籍》已经出版,有需要的可以点击购买。也可以点击 内容介绍 查看详情。