数据结构常见排序算法代码实现

本文详细介绍了几种常见的排序算法,包括冒泡排序、选择排序、插入排序以及希尔排序和归并排序的Java代码实现。这些算法是计算机科学的基础,对于理解和优化数据处理至关重要。通过实例展示了如何运用这些算法对数组进行排序,为理解高级排序算法提供了基础。
摘要由CSDN通过智能技术生成

数据结构常见排序算法代码实现


一、基本排序算法

1.冒泡排序

public class GuiBingTest {
    public static void main(String[] args) {
        int[] arr = {4,5,1,2,7,6,9,3,8};
        //新建一个临时数组存放
        int[] temp = new int[arr.length];
        mergeSort(arr,0,arr.length-1,temp);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"  ");
        }

    }

    public static void merge(int[]arr,int low,int mid,int high,int[] temp){
        //辅助数组起始索引
        int i=0;
        //左右两组序列起始索引
        int j = low,k=mid+1;
        while (j<=mid && k<=high){
            if (arr[j]<arr[k]){
                temp[i++]=arr[j++];
            }else {
                temp[i++]=arr[k++];
            }
        }

        //若左边还有剩余,全部拷贝到temp
        while (j<=mid){
            temp[i++] = arr[j++];
        }
        //若右边还有剩余,全部拷贝到temp
        while (k<=high){
            temp[i++] = arr[k++];
        }

        //把辅助数组拷贝到原数组
        for (int l = 0; l < i; l++) {
            arr[low+l] = temp[l];
        }
    }

    public static void mergeSort(int[]arr,int low,int high,int[] temp){
        if(low<high){
            int mid =(low+high)/2;
            //进行归并排序
            mergeSort(arr,low,mid,temp);
            mergeSort(arr,mid+1,high,temp);
            merge(arr,low,mid,high,temp);
        }

    }
}

2.选择排序

public class XuanZeTest {
    public static void main(String[] args) {
        int[] arr = {4,5,1,2,7,6,9,3,8};
        for (int i = 0; i <arr.length-1 ; i++) {
            int minIndex = i;
            for (int j = i+1; j <= arr.length-1; j++) {
                if(arr[minIndex]>arr[j]){
                    minIndex=j;
                }
            }
            swap(arr,i,minIndex);
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"  ");
        }
    }

    public static void swap(int[] arr,int a,int b){
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
}

3.插入排序

public class ChaRuTest {
    public static void main(String[] args) {
        int[] arr = {4,5,1,2,7,6,9,3,8};

        for (int i = 0; i < arr.length-1; i++) {
            for (int j = i+1; j > 0 ; j--) {
                if (arr[j-1]>arr[j]){
                    swap(arr,j-1,j);
                }else{
                    break;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"  ");
        }
    }
    public static void swap(int[] arr,int a,int b){
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
}

二、高级排序算法

1.希尔排序

public class XiErTest {
    public static void main(String[] args){
        int[] arr = {4,5,1,2,7,6,9,3,8,5};
        //对h进行确定
        int h = 1;
        while (h<arr.length/2){
            h = 2*h+1;
        }
        while (h>=1){
            //找到待插入元素
            for (int i = h; i < arr.length; i++) {
                //把待插入元素插入到有序数列中
                for (int j = i; j >=h ; j-=h) {
                    if (arr[j-h]>arr[j]){
                        swap(arr,j-h,j);
                    }else {
                        break;
                    }
                }
            }
            h=h/2;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"  ");
        }

    }

    public static void swap(int[] arr,int a,int b){
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
}

2.归并排序

public class GuiBingTest {
    public static void main(String[] args) {
        int[] arr = {4,5,1,2,7,6,9,3,8};
        //新建一个临时数组存放
        int[] temp = new int[arr.length];
        mergeSort(arr,0,arr.length-1,temp);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"  ");
        }

    }

    public static void merge(int[]arr,int low,int mid,int high,int[] temp){
        //辅助数组起始索引
        int i=0;
        //左右两组序列起始索引
        int j = low,k=mid+1;
        while (j<=mid && k<=high){
            if (arr[j]<arr[k]){
                temp[i++]=arr[j++];
            }else {
                temp[i++]=arr[k++];
            }
        }

        //若左边还有剩余,全部拷贝到temp
        while (j<=mid){
            temp[i++] = arr[j++];
        }
        //若右边还有剩余,全部拷贝到temp
        while (k<=high){
            temp[i++] = arr[k++];
        }

        //把辅助数组拷贝到原数组
        for (int l = 0; l < i; l++) {
            arr[low+l] = temp[l];
        }
    }

    public static void mergeSort(int[]arr,int low,int high,int[] temp){
        if(low<high){
            int mid =(low+high)/2;
            //进行归并排序
            mergeSort(arr,low,mid,temp);
            mergeSort(arr,mid+1,high,temp);
            merge(arr,low,mid,high,temp);
        }

    }
}

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值