新数据结构(2)选择、插入、希尔、基数排序

选择排序

每轮开始位置加一,从本轮数组开始位置向后遍历,找到当中的最小值放到本轮数组开始位置

代码:

java 复制代码
package Test20250207;

public class SelectSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr= {6,7,5,3,1,2,4,9,8};
        sort(arr);
        for(int i:arr) {
            System.out.print(i+" ");
        }
    }
    public static void sort(int[] arr) {
        for(int j=0;j<arr.length;j++) {
            int minIndex=j;
            for(int i=j;i<arr.length;i++) {
                if(arr[i]<arr[minIndex]) {
                    minIndex=i;
                }
            }
            int temp=arr[j];
            arr[j]=arr[minIndex];
            arr[minIndex]=temp;
        }
    }
}

插入排序

缺点:后面的数值小交换次数多

代码:

java 复制代码
package Test20250207;

public class InsertSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr= {6,7,5,3,1,2,4,9,8};
        sort(arr);
        for(int i:arr) {
            System.out.print(i+" ");
        }
    }
    public static void sort(int[] arr) {
        for(int i=1;i<arr.length;i++) {
            for(int j=i-1;j>=0;j--) {
                if(arr[j]>arr[j+1]) {
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
                else {
                    break;
                }
            }
        }
    }
}

希尔排序

时间复杂度是O(nlogn)

代码:

java 复制代码
package Test20250207;

public class ShellSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr= {6,7,5,3,1,2,4,9,8};
        sort(arr);
        for(int i:arr) {
            System.out.print(i+" ");
        }
    }
    public static void sort(int[] arr) {
        for(int grp=arr.length/2;grp>=1;grp/=2) {
            for(int i=grp;i<arr.length;i++) {
                for(int j=i-grp;j>=0;j-=grp) {
                    if(arr[j]>arr[j+grp]) {
                        int temp=arr[j];
                        arr[j]=arr[j+grp];
                        arr[j+grp]=temp;
                    }
                    else {
                        break;
                    }
                }
            }
            
        }
    }
}

基数排序

java 复制代码
package Test20250207;

public class RadixSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr= {5,27,643,75,267,90,56,43,123};
        sort(arr);
        for(int i:arr) {
            System.out.print(i+" ");
        }
    }
    public static void sort(int[] arr) {
        int[][] bucket=new int[10][arr.length];
        int[] elementCount=new int[10];
        int max=arr[0];
        for(int i=0;i<arr.length;i++) {
            max=Math.max(max,arr[i]);
        }
        int maxLen=(max+"").length();
        int n=1;
        for(int h=0;h<maxLen;h++) {
            for(int i=0;i<arr.length;i++) {
                int element=arr[i]/n%10;
                bucket[element][elementCount[element]]=arr[i];
                elementCount[element]++;
            }
            int index=0;
            for(int k=0;k<elementCount.length;k++) {
                if(elementCount[k]!=0) {
                    for(int j=0;j<elementCount[k];j++) {
                        arr[index]=bucket[k][j];
                        index++;
                    }
                }
                elementCount[k]=0;
            }
            n*=10;
        }
    }
}
相关推荐
云泽80814 分钟前
数据结构前篇 - 深入解析数据结构之复杂度
c语言·开发语言·数据结构
逝雪Yuki26 分钟前
数据结构与算法——字典(前缀)树的实现
数据结构·c++·字典树·前缀树·左程云
技术思考者31 分钟前
Leetcode - 反转字符串
数据结构·算法·leetcode
熬了夜的程序员2 小时前
【华为机试】34. 在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·华为od·华为·面试·golang
草莓熊Lotso3 小时前
【数据结构初阶】--排序(一):直接插入排序,希尔排序
c语言·数据结构·经验分享·其他·排序算法
小徐不徐说3 小时前
C++ 模板与 STL 基础入门:从泛型编程到实战工具集
开发语言·数据结构·c++·qt·面试
Tisfy5 小时前
LeetCode 2411.按位或最大的最小子数组长度:一次倒序遍历
数据结构·算法·leetcode·题解·位运算·遍历
晚云与城6 小时前
【数据结构】-----排序的艺术画卷
数据结构·算法·排序算法
j_xxx404_6 小时前
数据结构:算法复杂度与空间复杂度
c语言·数据结构·算法
自由随风飘8 小时前
旅游城市数量最大化 01背包问题
数据结构·c++·算法·动态规划·旅游