算法系列一:简单排序

一.三种简单易懂的排序算法

1.代码:

package com.inspire.jdk.caculate;

/**
 * Created by yaming on 18-6-26.
 */
public class OrderTest {

    public static void main(String[] args) {
        /*
        冒泡排序:相邻两个位置元素比较,如果前面一个元素比后面一个元素大,就交换位置
        每一轮比较后,会确定一个最大值,最大值放在最后一位
        总共需要比较 : data.length-1 次
        下一轮比较的次数比上一轮比较的次数少一次
        时间复杂度:O(n^2). 双重for循环
         */
        int[] arr = {2,4,5,3,9,1};
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-i-1; j++) {
                if(arr[j]>arr[j+1]){
                    int c = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = c;
                }
            }
        }


        /**
         * 选择排序:从数组中找到最小的元素,将它与数组第一个元素交换位置
         * 没一次确定一个最小值,放在第一个位置
         * 总共需要交换:data.length 次
         * 下一次要比较的数组比上一次少一个元素
         * 时间复杂度:O(n^2). 双重for循环
         */
        for (int i = 0; i < arr.length; i++) {
            int min =i;
            //找出比第一个位置上的元素还小的元素,
            for (int j = i+1; j < arr.length; j++) {
                if(arr[j]< arr[min]){
                    min = j;
                }
            }
            //交换两个变量: arr[temp] <--> arr[i]
            int temp = arr[min];
            arr[min] = arr[i];
            arr[i] = temp;
        }

        int[] data = {2,4,5,3,9,1};
        /**
         * 插入排序
         * 每一轮比较后的结果:该元素前面元素是有序的
         * 比较次数: data.length-1
         *
         */
        for (int i = 1; i < data.length; i++) {

            //只和该元素前面的元素比较,比较的结果:该元素前面的元素是有序的
            for (int j = i; j>0 ; j--) {
                //如果后面的大于前面的就交换
                if(data[j]<data[j-1]){
                    int temp = data[j];
                    data[j] = data[j-1];
                    data[j-1] = temp;
                }
            }
        }
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i]);
        }

    }
}

猜你喜欢

转载自www.cnblogs.com/inspred/p/9236558.html