简单排序算法

1.冒泡排序:

                1.算法描述:

               1. 首先在未排序数组的首位开始,和后面相邻的数字进行比较,如果前面一个比后面一个大那么则进行交换。
                2.接下来将第二个位置的数字和后面相邻的数字进行比较,如果大那么则进行交换,直到将最大的数字交换的数组的尾部。
                3.然后再从排序的数组的首位开始,重复前面两部将最大的数字交换到未排序数组的尾部如此反复,直到排序完毕。
                (交换到尾部的数字是已经拍好序的)。

package simple;

import java.util.Arrays;

public class BubbleSort {
    public static void main(String[] args) {
        int[] arrs={8,6,1,2,2,5,4,12,9};
        bubbleSort(arrs);
        System.out.println(Arrays.toString(arrs));
    }

    public static void bubbleSort(int[] arrs){
        int num=0;
//        for (int i = arrs.length-1; i >=0; i--) {
        for (int i = 1; i <arrs.length; i++) {
//            for (int j = 0; j < i; j++) {
            for (int j = 0; j < arrs.length-i; j++) {
                if (arrs[j]>arrs[j+1]){
                    num=arrs[j];
                    arrs[j]=arrs[j+1];
                    arrs[j+1]=num;
                }
            }
        }
    }
}

 

2.选择排序:

                1.算法描述:

                  首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
以此类推,直到所有元素均排序完毕。

package simple;

import java.util.Arrays;

public class SelectionSort {
    public static void main(String[] args) {
        int[] arrs={8,8,1,7,2,5,4,12,9};
        selectionSort(arrs);
        System.out.println(Arrays.toString(arrs));
    }

    public static void selectionSort(int[] arrs){
        int middle;
        for (int i = 0; i < arrs.length; i++) {
//            最小值的索引
                int index=i;
            for (int j = i+1; j < arrs.length; j++) {
                if(arrs[index]>arrs[j]){
                    index=j;
                }
                    middle=arrs[i];
                    arrs[i]=arrs[index];
                    arrs[index]=middle;
                }
            }
        }
    }

 

3.插入排序:

                 1.算法描述:

                1从第一个元素开始,该元素可以认为已经被排序;
                2取出下一个元素,在已经排序的元素序列中从后向前扫描;
                3如果该元素(已排序)大于新元素,将该元素移到下一位置;
                4重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
                5将新元素插入到该位置后;
                6重复步骤2~5。

 

package simple;

import java.util.Arrays;

public class InsertionSort {
    public static void main(String[] args) {
        int[] arrs={8,6,1,2,2,5,4,12,9};
        insertionSort(arrs);
        System.out.println(Arrays.toString(arrs));
    }

    public static void insertionSort(int[] arrs){

        for (int i = 1; i < arrs.length; i++) {
            int num=arrs[i];
            for (int j = i-1; j >=0 ; j--) {
                if (arrs[j]>=num){
                    arrs[j+1]=arrs[j];
                }else {
                    arrs[j+1]=num;
                    break;
                }
                if (j==0){
                    arrs[0]=num;
                }
            }
        }
    }
}

4 三种算法的比较


上面讲的三种排序,冒泡、选择、插入由于均使用的了嵌套循环,并且循环基本上都要遍
历所有的元素,所以用大 O 表示法都需要 O(N^2) 时间级别
但是三种排序还是有一些细微的区别(循环比较次数、交换次数)
                冒泡排序书写是最简单的,但是平均性能是没有选择排序和插入排序好的。因为它的循环比较次数和交换次数都比较多
                选择排序循环比较的次数多,但是交换的次数少
                插入排序的交换次数多,但是循环比较的次数少

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值