Java实现:选择排序、冒泡排序、插入排序

这篇具有很好参考价值的文章主要介绍了Java实现:选择排序、冒泡排序、插入排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文我们将使用Java编程语言实现经典的选择排序、冒泡排序和插入排序算法,并用对数器进行测试。

1. 选择排序

选择排序的基本思想是:遍历数组,每次找到数组中最小的元素,将其放到数组的前端。接着,在剩余的元素中继续寻找最小的元素,将其放在已找到的最小元素之后。重复该过程,直到数组完全有序。

1.1 选择排序代码

    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        //0~n-1
        //1~n-1
        //2~n-1
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {//从i~n-1上找最小值
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            }
            swap(arr, i, minIndex);
        }
     }
     private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
     }
}

1.2 测试部分

为了测试选择排序的正确性,我们需要使用到对数器。 对数器由以下几部分组成:

  1. 一种正确的排序方法(comparator),用于对比测试;
  2. 随机生成一个数组(generateRandomArray);
  3. 复制一个相同的数组(copyArray);
  4. 判断两个数组的值是否相同(isEquals);
  5. 打印数组(printArray)。
public static void comparator(int[] arr) {
    Arrays.sort(arr);
}
 //生成长度随即大小随机的数组
public static int[] generateRandomArray(int maxSize, int maxValue) {
    int[] arr = new int[(int) ((maxSize + 1) * Math.random())];//随机长度
    for (int i = 0; i < arr.length; i++) {
        arr[i] = (int) ((int) (maxValue + 1) * Math.random() - (int) (maxValue * Math.random()));
    }
    return arr;
}
 //复制数组
public static int[] copyArray(int[] arr) {
    int[] res = new int[arr.length];
    for (int i = 0; i < arr.length; i++) {
        res[i] = arr[i];
    }
    return res;
}
 //判断两个数组的值是否相同
public static boolean isEquals(int[] arr1, int[] arr2) {
    if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
        return false;
    }
    if (arr1.length != arr2.length) {
        return false;
    }
    for (int i = 0; i < arr1.length; i++) {
        if (arr1[i] != arr2[i]) {
            return false;
        }
    }
    return true;
}
 //打印数组
public static void printArray(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }
    System.out.println();
}

接下来,我们进行选择排序的大量测试

public static void main(String[] args) {
     int testTime = 500000;
    int maxSize = 100;
    int maxValue = 100;
    boolean succeed = true;
    for (int i = 0; i < testTime; i++) {
        int[] arr1 = generateRandomArray(maxSize, maxValue);
        int[] arr2 = copyArray(arr1);
        selectionSort(arr1);
        comparator(arr2);
        if (!isEquals(arr1, arr2)) {
            succeed = false;
            printArray(arr1);
            printArray(arr2);
            break;
        }
    }
    System.out.println(succeed ? "Nice!" : "Fucking fucked!");
 }

2. 冒泡排序

冒泡排序的基本思想是:遍历数组,相邻的两个元素进行比较,如果前一个元素大于后一个元素,则交换它们的位置。通过多次遍历,较大的元素不断地往数组的后端移动,最终实现数组的完全排序。

2.1 冒泡排序代码

public class Code02_BubbleSort {
    public static void bubbleSort(int[] arr) {
        if(arr==null||arr.length<2){
            return;
        }
        for(int j=arr.length - 1; j >0; j--){
            for(int i=0;i<j;i++){
                if(arr[i]>arr[i+1]){
                    swap(arr, i,i+1);
                }
            }
        }
     }
    public static void swap(int[] arr, int i, int j) {
        arr[i]=arr[i]^arr[j];
        arr[j]=arr[i]^arr[j];
        arr[i]=arr[i]^arr[j];
    }
}

2.2 测试部分

使用与选择排序相同的测试方法,进行冒泡排序的大量测试

public static void main(String[] args) {
     int testTime = 500000;
    int maxSize = 100;
    int maxValue = 100;
    boolean succeed = true;
    for (int i = 0; i < testTime; i++) {
        int[] arr1 = generateRandomArray(maxSize, maxValue);
        int[] arr2 = copyArray(arr1);
        bubbleSort(arr1);
        comparator(arr2);
        if (!isEquals(arr1, arr2)) {
            succeed = false;
            printArray(arr1);
            printArray(arr2);
            break;
        }
    }
    System.out.println(succeed ? "Nice!" : "Fucking fucked!");
 }

3. 插入排序

插入排序的基本思想是:将数组的元素一个个地插入到已经有序的部分,使得有序部分不断扩大,直至数组完全有序。

3.1 插入排序代码

public class Code03_InsertionSort {
    public static void insertionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        for (int i = 1; i < arr.length; i++) {
            for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
                swap(arr, j, j + 1);
            }
        }
     }
     public static void swap(int[] arr, int i, int j) {
        arr[i] = arr[i] ^ arr[j];
        arr[j] = arr[i] ^ arr[j];
        arr[i] = arr[i] ^ arr[j];
    }
}

测试内容同上面一样文章来源地址https://www.toymoban.com/news/detail-433874.html

到了这里,关于Java实现:选择排序、冒泡排序、插入排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构:直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序(C实现)

    个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》 排序:使一串数据,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 插入排序的思路:把待排序数组,逐个插入到已经排好序的有序数组中,直到所有待排序数组插入完成,的到一个新的有序

    2024年02月11日
    浏览(54)
  • 排序算法一:冒泡、选择、插入排序

    目录         冒泡排序 理论 代码实现 时间复杂度 选择排序 理论 代码实现  时间复杂度 插入排序 理论分析 代码实现 时间复杂度    冒泡,我们很容易联想到水煮沸,或者是鱼儿吐泡的情景,水泡会在水中上升到达水面。冒泡排序正如其名,即大的数一个个往上冒出来。

    2024年02月22日
    浏览(43)
  • 排序算法(初阶)【冒泡,插入,选择排序】

    比较相邻的两个元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这被称为一趟冒泡排序 这样就可以把数组中要排序的数中的最大值放到最后,也相当于把一个元素排在了元素有序时它应处于的位置,它既

    2024年01月21日
    浏览(49)
  • 冒泡排序 简单选择排序 插入排序 快速排序

    bubblesort 两个for循环,从最右端开始一个一个逐渐有序 selectsort 假设是升序,两个for循环,从最左端开始一个一个逐渐有序,找到lengh-1个无序区的最小值 insertsort 两个for循环,从最左端开始一个一个逐渐有序,默认第一个就是有序区,第一个for遍历无序区,第二个for循环遍历

    2024年02月13日
    浏览(46)
  • 基于 matplotlib 实现的基本排序算法的动态可视化项目源码,通过 pyaudio 增加音效,冒泡、选择、插入、快速等排序

    依托 matplotlib 实现的基本排序算法的动态可视化,并通过 pyaudio 增加音效。 安装 在使用之前请先检查本地是否存在以下库: matplotlib pyaudio fire requirements.txt 中包含了上述的库 使用 目前本项目仅提供了以下排序算法 冒泡排序 选择排序 插入排序 快排 归并排序 命令行工具 命

    2024年02月08日
    浏览(42)
  • 八大排序(一)冒泡排序,选择排序,插入排序,希尔排序

    冒泡排序的原理是: 从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会

    2024年02月08日
    浏览(40)
  • 数据结构算法--2 冒泡排序,选择排序,插入排序

    思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。 这时冒泡排序第一轮结束,数列最右侧元素9的位置可认为是一个有序区,有序区目前有一个元素. 第二轮排序

    2024年02月13日
    浏览(64)
  • (搞定)排序数据结构(1)插入排序 选择排序+冒泡排序

    目录 本章内容如下    一:插入排序                               1.1插入排序                   1.2希尔排序     二:选择排序                    2.1选择排序  三:交换排序                    3.1冒泡排序         1.1直接插入排序   

    2024年02月07日
    浏览(65)
  • 【数据结构--八大排序】之冒泡排序+选择排序+插入排序

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 🔸每次从a]0]开始,

    2024年02月07日
    浏览(259)
  • 【数据结构】插入排序、选择排序、冒泡排序、希尔排序、堆排序

    前言:生活中我们总是会碰到各种各样的排序,今天我们就对部分常用的排序进行总结和学习,今天的内容还是相对比较简单的一部分,各位一起加油哦! 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 💯代码仓库:卫卫周大胖的学习日记💫 💪关注博主和

    2024年02月04日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包