排序算法 |冒泡排序、选择排序、插入排序,快速排序

排序算法|冒泡排序、选择排序、插入排序,快速排序

1. 冒泡排序

冒泡排序原理:
相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处

package homeworkC;
import java.util.Arrays;


public class BubbleSort {
    public static void main(String[] args) {
        //冒泡排序法
        int[] arr={6,80,-3,4,85,52,79,4,-6,2,9,8};
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));

    }

    private static void bubbleSort(int[] arr) {
        for (int i = arr.length-1; i >0 ; i--) {
            for(int j=0;j<i;j++){
                if(arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
    }
}

2. 选择排序

选择排序原理:
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处

    private static void selectionSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for(int j=i+1;j<arr.length;j++)
                if(arr[i]>arr[j]){
                    int temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
        }
    }

3. 插入排序

直接插入排序的原理:
将一个数插入到一个长度为m的有序表中,使之仍保持有序,从而得到一个新的长度为m+1的有序列表.

public class test2 {
    public static void main(String[] args) {
        int[] arr = new int[]{3, 5, 7, 8, 9, 3, 4, 52, 1, 3};
        insertSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void insertSort(int[] arr) {
        //从i=1 开始,因为单独一个元素arr[0]是有序的;
        for (int i = 1; i < arr.length; i++) {
            //从无序数列中取出一个元素赋值给temp
            int temp = arr[i];
            int t = i - 1;
            //不断往前寻找,直到找到比temp小的值或者t小于0为止
            while (t >= 0 && arr[t] > temp) {
                arr[t + 1] = arr[t];
                t--;
            }
            //将temp插在其之后
            arr[t + 1] = temp;

        }
    }
}

4. 快速排序

快速排序的原理:
a.从数组中取出一个数,作为基准数。
b.分区:将比这个数大或等于的数全放到他的右边,小于他的数全放到他的左边。
c.再对左右区间重复第二步,直到各区间只有一个数。

package homeworkC;
import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args) {
        //快速排序
        int[] arr={6,80,-3,4,7};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    private static void quickSort(int[] arr,int start,int end) {
        if(start<end) {//循环终止条件
            int index = quickSortIndex(arr, start, end);
            quickSort(arr, start, index - 1);
            quickSort(arr, index + 1, end);
        }
    }

    private static int quickSortIndex(int[] arr, int st, int en) {
        int x=arr[st];
        int i=st;
        int j=en;
        while (i<j) {//判断终止条件 ,这里是if,不是while!所以只有一次“循环"
            if (i < j && arr[j] >= x) {
                j--;
            }
            if (i < j && arr[j] < x) {
                arr[i] = arr[j];
                i++;

            }

            if (i < j && arr[i] < x) {
                i++;
            }
            if (i < j && arr[i] >= x) {
                arr[j] = arr[i];
                j--;
            }
        }
        arr[i]=x;
        return i;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值