典型排序算法java代码

该博客内容是依据殷人昆版的数据结构编写代码,与信息技术领域的数据结构相关,为代码编写提供了基于特定版本数据结构的实践参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.company;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
	int[] arr = {3,5,8,2,6,7,1};
	BubbleSorted(arr);
//    QuickSorted(arr,0,6);
//        InsertionSorted(arr);
//        SelectionSorted(arr, 0, 6);
    }
    public static void BubbleSorted(int[] arr){
//        基本思路:外层循环控制着起泡的趟数n-1,从数组的末尾开始比较,如果是逆序则交换,一趟起泡后,将最小值存到数组的最开始,
// 每次起泡后确定数组的最小值
        int i,j;
        int len = arr.length;
        boolean res = true;
        for(i = 0;i<len-1;i++){
            for(j = len-1;j>=i+1;j--){
                if(arr[j]<arr[j-1]) {
                    int temp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = temp;
                    res = false;
                }
            }
        }
        for(int k:arr){
            System.out.print(k);
        }
    }
    public static void QuickSorted(int[] arr,int left,int right){
        int i;
        if(left<right){
            int pivotpos = Partition(arr,left,right);
            QuickSorted(arr,left,pivotpos-1);
            QuickSorted(arr,pivotpos+1,right);
        }

    }

    private static int Partition(int[] arr, int low, int high) {
//        两边相向检查,发现逆序交换
        int pivot = arr[low];
        int i = low+1;
        int j = high;
        while(i<j){
            while (i<j&&pivot<arr[j])j--;
            while(i<j&&pivot>arr[i])i++;
            if(i<j){
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
                i++;
                j--;
            }
        }
        arr[low] = arr[i];
        arr[i] = pivot;
        return i;
    }
    public static void InsertionSorted(int[] arr){
//        基本思路:将数组分为有序数组和无序数组两个部分,一开始时有序数组中只含有arr[0],然后对无序数组中的元素插入到有序数组中,条件是无序数组中的元素
//        小于有序数组中的最后一个元素,然后遍历有序数组中的元素,找到要插入的位置
        int i,j;
        for(i = 1;i<arr.length;i++){
            if(arr[i]<arr[i-1]){
                int temp = arr[i];
                for(j = i-1;j>=0&&arr[j]>temp;j--){
                    arr[j+1] = arr[j];
                }
                arr[j+1] = temp;
            }
        }
        for(i = 0;i<arr.length;i++) {
            System.out.println(arr[i]);
        }
    }
    public static void SelectionSorted(int[] arr,int left,int high){
//        每次在数组中找到最小的元素存到有序数组中,逐步扩大有序表
        int temp;
        int i,j;
        int k;
        for(i = left;i<high;i++) {
            k = i;
            for (j = i + 1; j <= high; j++)
                if (arr[j] < arr[k])
                    k = j;
            if (k != i) {
                temp = arr[k];
                arr[k] = arr[i];
                arr[i] = temp;
            }
        }
        for(i = 0;i<arr.length;i++) {
            System.out.println(arr[i]);
        }
    }
    public static void Merge(int[] arr1,int[] arr2,int left,int mid,int right){
//        二路归并,将两个有序表合并为一个有序表
        int i = left;
        int j = mid+1;
        int k = left;
        while (i<=mid&&j<=right){
            if(arr1[i]<arr1[j])
                arr2[k++] = arr1[i++];
            else
                arr2[k++] = arr1[j++];
        }
        while(i<=mid){
            arr2[k++] = arr1[i++];
        }
        while (j<=right){
            arr2[k++] = arr1[j++];
        }
    }
}

根据殷人昆版的数据结构编写的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值