java数据结构和算法-1,简单排序

来源:互联网 发布:卖淘宝小号的平台 编辑:程序博客网 时间:2024/06/05 04:35

在java数据结构和算法中,简单排序分为冒泡排序、选择排序、插入排序三种,也是最基础的三种,
废话不多,码上见!
1、冒泡排序

public class BubbleSort{    public static void sort(int[] arr){        //临时变量,用于数据交换,如果不用临时变量的话用运算符或者增加操作步骤也能实现;        int temp = 0;        //一个for循环用于遍历一次数组中的数据        for (int i = 0; i < arr.length -1; i++) {            //第二个for循环为了让每一个数组中的数据都去对比一次数组中的数据,初学的时候不知道为什么就是不会!!!太笨了~(* ̄ω ̄)~            for (int j = arr.length -1; j > i; j--) {                if (arr[j] < arr[i]) {//正在往上冒的数据如果遇到小于它的数据就交换位置                    temp = arr[j];                    arr[j] = arr[i];                    arr[i] = temp;                }            }        }        //打印排序后的数据        for (int i = 0; i < arr.length; i++) {            System.out.println(arr[i]);        }    }    public static void main(String[] args) {        int[] arr = {23,43,5,71};//声明一个int类型数组,用于排序        sort(arr);//执行排序方法    }}

输出结果:

5234371

重点:

  1. 数据从底部开始往上排
  2. 遇到比自身大的数继续排,直到遇到小于等于自身的数为止

2、插入排序

    //这次没有另外写方法了,直接放main里    public static void main(String[] args) {        int[] arr = {19,65,1,8,33,45,21,6};//声明一个int类型数组,用于排序        int temp = 0;//临时变量用于交换数据        int k = 0;//起到游标的作用,记录需要插入的位置        for (int i = 1; i < arr.length; i++) {            k = i;            temp = arr[i];//记录正在排序的那个数            while(k > 0 && temp <= arr[k-1]){//判断从后往前正在排序的那一个是否已经到头了,以及判断前一个数是否比自身大                arr[k] = arr[k-1];//把比temp大的数往后移                k--;//记录当前数据往后移之后,“空出来的”,需要插入的位置            }            arr[k] = temp;//最后把数据放到需要的插入的位置        }        //打印排序后的结果        for (int i = 0; i < arr.length; i++) {            System.out.println(arr[i]);        }    }

输出结果

1681921334565

重点:

  1. 插入排序是从第二个数开始排的,用第二个数开始,然后和前面的数进行比较,并不是和冒泡一样比较所有的数。
  2. 插叙排序的效率比冒泡要高,因为不用每个数据都和数组中的数据对比一遍
  3. 其实和冒泡差不多,只是冒泡是每比较一次数据就交换一次,这里插入排序一轮比较之后交换的次数是1,其他的都是把前面的数移动到了后面,没有数据交换。

3、选择排序

    public static void sort(int[] arr){        int k;//起到游标的作用,记录要交换的位置        int temp;//临时变量用于交换数据        for (int i = 0; i < arr.length; i++) {            k = i;//记录开始的时候要排序的数所在的位置            for (int j = i; j < arr.length; j++) {//从当前位置(arr[k])往后比较                if (arr[j]<arr[k]) {//在比较数据的时候如果遇到后面的数比自身小,就记录后面的数的位置                    k = j;                }            }            temp = arr[i];//在最后执行数据交换            arr[i] = arr[k];            arr[k] = temp;        }        for (int i = 0; i < arr.length; i++) {            System.out.println(arr[i]);        }    }    public static void main(String[] args) {        int[] arr = {9,15,4,2,99};//声明一个int类型数组,用于排序        sort(arr);      }

输出结果

2491599

重点:

  1. 和插入排序一样需要有游标
  2. 排序中比较完数据之后不作数据交换的操作,而是记录要交换的位置
  3. 效率在这三个中最高,因为全程执行的数据交换操作最少
阅读全文
0 0
原创粉丝点击