冒泡+快排+归并

排序算法复杂度总结:
在这里从插入图片描是收到述
摘自于超详细十大经典排序算法总结

1.冒泡排序算法

package sortMethod;

import java.util.Scanner;
import java.util.jar.JarOutputStream;

public class bubbleSort {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String[] arr_string = s.split(",");
        int[] arr = new int[arr_string.length];
        
        for(int i=0;i<arr.length;i++){
            arr[i] = Integer.parseInt(arr_string[i]);
        }
        for(int i=0;i<arr.length;i++){
            //关键:遍历i次,倒数第i个会排好顺序
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j+1]<arr[j]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println("arr");
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+",");
        }
    }
}

2.快速排序算法:

package sortMethod;

import java.util.Scanner;

public class test {
    public static void main(String[] args){
        Scanner sc  = new Scanner(System.in);
        String str = sc.next();
        //输入str通过分隔符","转化为String型数组
        String[] arr = str.split(",");
        int[] arr1 = new int[arr.length];
        //将String型数组转换为int型数组
        for(int i=0;i<arr1.length;i++){
            arr1[i] = Integer.parseInt(arr[i]+",");
        }

        quicksort(arr1,0,arr.length-1);
        for(int i=0;i<arr1.length;i++){
            System.out.print(arr1[i]);
        }

    }
    //分区:利用双指针思想为基准值pivot寻找中间的位置,并且返回该位置。
    public static int partition(int[] arr,int low,int high){
        int i = low;
        int j = high;

        int pivot = arr[low];
        while(i<j){
         //1.从右向左移动j,找到第一个小于基准值的值 arr[j]
            while(arr[j]>=pivot && i<j){
                j--;
            }
            //2.将右侧找到小于基准数的值加入到左边的(坑)位置, 左指针想中间移动一个位置i++
            if(i<j){
                arr[i] = arr[j];
                i++;
            }
             //3.从左向右移动i,找到第一个大于等于基准值的值 arr[i]
            while(arr[i]<=pivot && i<j){
                i++;
            }
            //4.将左侧找到的打印等于基准值的值加入到右边的坑中,右指针向中间移动一个位置 j--
            if(i<j){
                arr[j] = arr[i];
                j--;
            }
        }
        //使用基准值填坑,这就是基准值的最终位置
        arr[i] = pivot;
        //返回基准值的位置索引
        return i;
    }

    public static void quicksort(int[] arr,int low,int high){
        //利用递归的思想完成pivot左序列,pivot右序列的快排
        if(low < high){
            //分区操作,将一个数组分成两个分区,返回分区界限索引
            int index = partition(arr,low,high);
            //对左分区进行快排
            quicksort(arr,low,index-1);
            //对右分区进行快排
            quicksort(arr,index+1,high);
        }

    }
}

3.归并排序

package sortMethod;

import java.util.Arrays;

public class mergeSort {
    public static void main(String[] args) {
        int[] arr = {8,10,2,5,3};
        int[] ans = mergesort(arr);
        for(int i=0;i<ans.length;i++){
            System.out.print(ans[i]+" ");
        }

    }

    public static int[] mergesort(int[] arr){
        if(arr.length < 2){
            return arr;
        }
        int mid = arr.length/2;
        int[] left = Arrays.copyOfRange(arr,0,mid);
        int[] right = Arrays.copyOfRange(arr,mid,arr.length);
        return merge(mergesort(left),mergesort(right));
    }

//合并两个有序数组
    public static int[] merge(int[] left,int[] right){
        int[] ans = new int[left.length+right.length];
        for(int index=0,i=0,j=0;index<ans.length;index++) {
            if(i>=left.length){
                ans[index] = right[j++];
            }else if(j>=right.length){
                ans[index] = left[i++];
            }else if(left[i]>right[j]){
                ans[index] = right[j++];
            }else{
                ans[index] = left[i++];
            }

        }
        return ans;

    }
}

以上仅作为学习笔记,参考多个网站学习消化后所得,如有侵权,请联系,删。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
排序算法是计算机科学中用于对一组数据进行有序排列的基本操作,常见的排序算法冒泡排序、选择排序、快速排序和归并排序。在 Python 中,这些算法可以通过内置函数 `sorted()` 或者自定义函数来实现。以下是简单介绍: 1. **冒泡排序 (Bubble Sort)**: 冒泡排序是一种简单的比较型排序算法,它的基本思想是重复地遍历待排序的序列,每次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。Python 示例: ```python def bubble_sort(lst): n = len(lst) for i in range(n): for j in range(0, n-i-1): if lst[j] > lst[j+1]: lst[j], lst[j+1] = lst[j+1], lst[j] return lst ``` 2. **选择排序 (Selection Sort)**: 选择排序每次从未排序的部分找到最小(或最大)的元素,并将其放到已排序部分的末尾。Python 实现: ```python def selection_sort(lst): for i in range(len(lst)): min_idx = i for j in range(i+1, len(lst)): if lst[j] < lst[min_idx]: min_idx = j lst[i], lst[min_idx] = lst[min_idx], lst[i] return lst ``` 3. **快速排序 (Quick Sort)**: 快速排序是一种分治算法,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,直到整个序列有序。Python 示例(使用 Hoare 变换): ```python def quick_sort(arr, low, high): if low < high: pivot_index = partition(arr, low, high) quick_sort(arr, low, pivot_index - 1) quick_sort(arr, pivot_index + 1, high) def partition(arr, low, high): pivot = arr[high] i = low - 1 for j in range(low, high): if arr[j] <= pivot: i += 1 arr[i], arr[j] = arr[j], arr[i] arr[i+1], arr[high] = arr[high], arr[i+1] return i + 1 ``` 4. **归并排序 (Merge Sort)**: 归并排序也是一种分治算法,它将待排序的序列分为两半,分别排序,然后合并。Python 示例: ```python def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left_half = merge_sort(arr[:mid]) right_half = merge_sort(arr[mid:]) return merge(left_half, right_half) def merge(left, right): merged = [] left_idx, right_idx = 0, 0 while left_idx < len(left) and right_idx < len(right): if left[left_idx] <= right[right_idx]: merged.append(left[left_idx]) left_idx += 1 else: merged.append(right[right_idx]) right_idx += 1 merged.extend(left[left_idx:]) merged.extend(right[right_idx:]) return merged ``` 如果你想深入了解这些排序算法的工作原理、性能以及适用场景,可以继续提问哦。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值