排序算法

冒泡排序

用[2,8,6,1]做例子
2和8作比较,左小又大,下一个循环;
8和6作比较,左大右小,替换值后的数组[2,6,8,1]
8和1做比较,左大右小,替换值后的数组[2,6,1,8]
依次循环
	public static void majorityElement(int[] arr){
        for(int i = 0;i<arr.length;i++){
            for(int z=0;z<arr.length-i-1;z++){
                if(arr[z] > arr[z+1]){
                    int temp = arr[z];
                    arr[z] = arr[z+1];
                    arr[z+1] = temp;
                }
            }
        }
    }

选择排序

类似冒泡排序,只是冒泡排序每次找到小的值都替换,而选择排序会找到最小的再去替换
	public static void majorityElement(int[] arr){
        for(int i = 0;i<arr.length;i++){
            int t = i;
            for(int z=i;z<arr.length;z++){
                if(arr[z] < arr[t]){
                    t = z;
                }
            }
            int temp = arr[i];
            arr[i] = arr[t];
            arr[t] = temp;

        }
    }

插入排序

数组分为两个部分,第一个部分为排好序的数组,后面的为待排序的数组
拿出待排序的每一个数,去和前面排好序的数组值比较,直接插入。
用[2,8,6,1]做例子
[2]为已经排好的部分,用8去比较,大于2,将8赋值给原数组8的位置
[2,8]为已经排好的部分,用6去比较,6小于8,8移动到6的位置,6大于2,直接将6赋值给原数组8的位置
[2,6,8]为已经排好的部分,用1去比较,1小于8,8移动到1的位置,1小于6,6移动到8的位置,1小于2,2移动到6的位置,最后变为[1,2,6,8]
赋值时都是按照原数组去移动赋值的
	public static void majorityElement(int[] arr){
        for(int i = 1;i<arr.length;i++){
            int x = i-1,temp = arr[i];
            while(x >= 0 && temp < arr[x]){
                arr[x+1] = arr[x];
                x--;
            }
            arr[x+1] = temp;
        }
    }

快速排序

用[2,8,6,1]做例子
2作为基准值,从右向左找出小于基准值的数字,判断1小于基准值,换位置后数组变为[1,8,6,1]
2作为基准值,从左向右找出大于基准值的数字,判断8大于基准值,换位置后数组变为[1,8,6,8]
此时小于2的都在左边,大于2的都在右边,将基准值替换到数组中[1,2,6,8]
	public static void main(String[] args) {
		int[] arr = {6,3,5,7,9,5,4,1,2};
        quickSort(arr,0,arr.length-1);
        System.out.println();
    }

    public static void quickSort(int[] arr,int low,int high){
        if(low >= high){
            return ;
        }
        int l = low;
        int r = high;
        int tmp  = arr[low];//基准值
        while(l < r){

			//从右向左找出小于基准值的数字
            while(l < r && arr[r] >= tmp){
                r--;
            }
            arr[l] = arr[r];
            //从左向右找出大于基准值的数字
            while(l < r && arr[l] <= tmp){
                l++;
            }
            arr[r] = arr[l];
        }
        arr[l] = tmp;
        majorityElement(arr,low,r-1);
        majorityElement(arr,r+1,high);
    }

网上看了一篇排序算法不错的文章,纪录一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值