亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【九月打卡】第19天 選擇排序法+插入排序法

课程名称:算法与数据结构
课程章节:选择排序法+插入排序法
课程讲师: Liuyubobobo

课程内容

数据结构

数据结构研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据或者修改数据。

算法

Algorithm的本意:解决问题的方法
算法是一系列解决问题的,清晰,可执行的计算机指令

有限性
确定性:不会产生二义性
可行性
输入
输出

排序算法

  • 插入、冒泡、选择,希尔
  • 快速、归并、堆排序
  • 计数排序、桶排序

插入排序

package com.wkq.insertionsort;

import com.wkq.Sort;
import com.wkq.selectionsort.SelectionSort2;
import com.wkq.util.ArrayGenerator;
import com.wkq.util.SortingHelper;

/**
 * 插入排序法
 */
public enum InsertionSort implements Sort {
    INSTANCE;

    @Override
    public <E extends Comparable<E>> void sort(E[] arr) {
        //arr[0,i)已排序,[i,n)未排序,每次都将i插入到已排序数组中的合适位置
        for (int i = 1; i < arr.length; i++) {
            E temp = arr[i];//暂存i位置处的元素
            int j;
            for (j = i; j > 0 && temp.compareTo(arr[j - 1]) < 0; j--) {
                arr[j] = arr[j - 1];
            }
            arr[j] = temp;
        }
    }

    public static void main(String[] args) {
        int[] dataSize = {10000, 100000};
        for (int n : dataSize) {
            Integer[] arr = ArrayGenerator.generatorRandomArray(n, n);
            SortingHelper.sortTest(InsertionSort.INSTANCE, arr);
        }
    }
}

选择排序

package com.wkq.selectionsort;

import com.wkq.Sort;
import com.wkq.util.ArrayGenerator;
import com.wkq.util.SortingHelper;

/**
 * 初始状态:arr[0...n)未排序
 * 外层循环执行操作:arr[i,n)中的最小值要放到arr[i]的位置
 * 内存循环执行操作:找出arr[i,n)中最小值的索引 minIndex
 * 循环不变量:arr[i...n)未排序,arr[0...i)已排序
 * 选择排序法的复杂度分析:
 *  1+2+3+...+n
 *  =(1+n)*n/2
 *  =(1/2)*n^2+(1/2)n
 *  O(n^2)
 */
public enum SelectionSort implements Sort {
    INSTANCE;

    @Override
    public <E extends Comparable<E>> void sort(E[] arr) {
        //循环不变量 arr[0,i)已排序,arr[i,n)未排序
        for (int i = 0; i < arr.length; i++) {
            int minIndex = i;
            //选择arr[i...n)中最小值的索引
            for (int j = i + 1; j < arr.length; j++) {
                minIndex = arr[j].compareTo(arr[minIndex]) < 0 ? j : minIndex;
            }
            SortingHelper.swap(arr, i, minIndex);
        }
    }

    public static void main(String[] args) {
        int[] dataSize = {10000, 100000};
        for (int n : dataSize) {
            Integer[] arr = ArrayGenerator.generatorRandomArray(n, n);
            SortingHelper.sortTest(SelectionSort.INSTANCE, arr);
        }
    }

}

学习收获

今天学习并总结了选择排序法和插入排序法
图片描述

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
6
獲贊與收藏
11

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消