首页 > 其他分享 >DAY003_选择排序、冒泡排序、插入排序

DAY003_选择排序、冒泡排序、插入排序

时间:2023-08-24 14:46:06浏览次数:46  
标签:遍历 int 插入排序 xx 冒泡排序 System length println DAY003

选择排序

第一遍遍历:从头开始,找到最小值的坐标,将最小值和数组第一个元素对调
第二遍遍历:从第二个元素开始,找到最小值的坐标,将最小值和数组第二个元素对调
第三遍遍历:从第三个元素开始,找到最小值的坐标,将最小值和数组第三个元素对调
....

冒泡排序

第一遍遍历:只要前数比后数大就交换,一遍之后最大元素被移动到最后
第二遍遍历:还是从头来,只要前数比后数大就交换,一遍之后,次大的元素被移动到倒数第二个位置
第三遍遍历:还是从头来,只要前数比后数大就交换,一遍之后,第三大的元素被移动到倒数第三个位置
...

插入排序

第一遍遍历:插入第一个元素,不动
第二遍遍历:插入第二个元素,依次和它前面的元素比较看看能否互换,直到无法互换
第三遍遍历:同上
...

代码

点击查看代码
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ArrayUtil;
import org.junit.Test;

import java.util.Arrays;

public class Day003_选择排序冒泡排序插入排序 {

    @Test
    public void test01(){
        for (int p = 0; p < 10000; p++) {
            for (int i = 1; i < 4; i++) {
                int[] xx = 随机等概率生成一个数组.invoke(50, -30, 50);
                int[] xxClone = ArrayUtil.clone(xx);

                System.out.println(Arrays.toString(xx));
                System.out.println(Arrays.toString(xxClone));
                Assert.isTrue(ArrayUtil.equals(xx, xxClone));

                if (i == 1) {
                    sort1(xx);
                } else if (i == 2) {
                    sort2(xx);
                } else {
                    sort3(xx);
                }
                Arrays.sort(xxClone);

                System.out.println(Arrays.toString(xx));
                System.out.println(Arrays.toString(xxClone));
                Assert.isTrue(ArrayUtil.equals(xx, xxClone));
                System.out.println("=========================");
            }
        }
    }

    /**
     * 选择排序
     */
    private void sort1(int[] xx) {
        System.out.println("选择排序");
        for (int i = 0; i < xx.length; i++) {
            int minIndex = i;
            for (int j = i + 1; j < xx.length; j++) {
                if (xx[j] < xx[minIndex]) {
                    minIndex = j;
                }
            }

            swap(xx, i, minIndex);
        }
    }

    /**
     * 冒泡排序
     */
    private void sort2(int[] xx) {
        System.out.println("冒泡排序");
        for (int i = xx.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (xx[j] > xx[j + 1]) {
                    swap(xx, j, j + 1);
                }
            }
        }
    }

    /**
     * 插入排序
     */
    private void sort3(int[] xx) {
        System.out.println("插入排序");
        for (int i = 0; i < xx.length; i++) {
            for (int j = i; j - 1 >= 0; j--) {
                if (xx[j] < xx[j - 1]) {
                    swap(xx, j, j - 1);
                }
            }
        }
    }

    /**
     * 交换
     */
    private void swap(int[] xx, int x, int y) {
        int temp = xx[x];
        xx[x] = xx[y];
        xx[y] = temp;
    }
}

public class 随机等概率生成一个数组 {

    public static int[] invoke(int max, int min, int length) {
        int[] xx = new int[length];
        for (int i = 0; i < xx.length; i++) {
            //生成一个 [0,N] 的整数
            int i1 = (int) (Math.random() * (max + 1 - min));
            int i2 = i1 + min;
            if (i2 > max || i2 < min) {
                throw new RuntimeException("报错啦");
            }
            xx[i] = i2;
        }
        return xx;
    }

    /**
     * 相邻两个元素不相等
     */
    public static int[] invoke1(int max, int min, int length) {
        int[] xx = new int[length];
        for (int i = 0; i < xx.length; i++) {
            //生成一个 [0,N] 的整数
            do {
                int i1 = (int) (Math.random() * (max + 1 - min));
                int i2 = i1 + min;
                if (i2 > max || i2 < min) {
                    throw new RuntimeException("报错啦");
                }
                xx[i] = i2;
            } while (i > 0 && xx[i] == xx[i - 1]);
        }
        return xx;
    }
}

标签:遍历,int,插入排序,xx,冒泡排序,System,length,println,DAY003
From: https://www.cnblogs.com/felix-1/p/17654083.html

相关文章

  • C#插入排序算法
    插入排序实现原理插入排序算法是一种简单、直观的排序算法,其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。具体实现步骤如下首先咱们假设数组长度为n,从第二个元素开始,将当前元素存储在临时变量temp中。从当前元素的前一个位置开始向前遍历,比较temp与每个已排......
  • 快速排序,冒泡排序与选择排序
    冒泡排序冒泡排序(BubbleSort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成......
  • 选择冒泡插入排序 异或 二分 对数器
    算法时间复杂度O(x)空间复杂度O(x)数据状况是否影响时间复杂度表现选择排序n21否冒泡排序n21否插入排序n21是(最好情况下O(N))1.选择排序:遍历找出0~n-1最小的数放在0位置,遍历找出1~n-1最小的数放在1位置时间复杂度O(n2) 空间复杂度O(1)voidswap(vector<int>&nums,inti,intj......
  • 冒泡排序
    publicstaticvoidbubbleSort(int[]arr){for(inti=0;i<arr.length-1;i++){for(intj=0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){inttemp=arr[j];arr[j]=arr[j+1];......
  • 插入排序
    插入排序就像斗地主时理牌一样publicstaticvoidinsertSort(int[]arr){for(inti=1;i<arr.length;i++){//i是待插入元素的索引inttemp=arr[i];//待插入值intj=i-1;//已排序区域......
  • 冒泡排序
    冒泡排序-时间复杂度为O(n2)publicclassDemo{publicstaticvoidmain(String[]args){int[]a={3,23,12,3,423,22,4,534,66,34};System.out.println(Arrays.toString(sort(a)));}//冒泡排序//1比较数组中,两个相邻的元素,如......
  • 冒泡排序
    #include<iostream>usingnamespacestd;intmain(){intn;cin>>n;inta[n];for(inti=0;i<n;i++){ cin>>a[i]; }for(inti=1;i<n;i++){for(intj=1;j<=n-i;j++){if(a[j-1]<a[j]){......
  • 冒泡排序
    #include<iostream>usingnamespacestd;intmain(){intt,a[4];for(inti=1;i<=3;i++){cin>>a[i];}for(inti=1;i<=2;i++){for(intj=1;j<=3-i;j++){if(a[j]<a[j+1]){t......
  • 冒泡排序
    #include<iostream>usingnamespacestd;intmain(){intt,a[4];for(inti=1;i<=3;i++){cin>>a[i];}for(inti=1;i<=2;i++){for(intj=1;j<=3-i;j++){if(a[j]<a[j+1]){t......
  • 插入排序(LOW)
    博客地址:https://www.cnblogs.com/zylyehuo/#_*_coding:utf-8_*_definsert_sort(li):foriinrange(1,len(li)):#i表示摸到的牌的下标tmp=li[i]j=i-1#j指的是手里的牌的下标whilej>=0andli[j]>tmp:li[......