漫画:什么是插入排序?
戳藍字“CSDN云計算”關注我們哦!
—————? 第二天? —————
————————————
人們如何進行撲克牌的排序呢?舉個例子,比如我手中有紅桃6,7,9,10這四張牌,已經處于升序排列:
這時候,我又抓到了一張紅桃8,如何讓手中的五張牌重新變成升序呢?用冒泡排序,選擇排序,亦或是快速排序?
恐怕正常人打牌的時候都不會那么做。最自然也最簡單的方式,是在已經有序的四張牌中找到紅桃8應該插入的位置,也就是7和9之間,把紅桃8插入進去:
給定無序數組如下:把數組的首元素5作為有序區,此時有序區只有這一個元素:第一輪
讓元素8和有序區的元素依次比較。8>5,所以元素8和元素5無需交換。
此時有序區的元素增加到兩個:
第二輪
讓元素6和有序區的元素依次比較。6<8,所以把元素6和元素8進行交換:
6>5,所以把元素6和元素5無需交換。此時有序區的元素增加到三個:
第三輪
讓元素3和有序區的元素依次比較。3<8,所以把元素3和元素8進行交換:3<6,所以把元素3和元素6進行交換:3<5,所以把元素3和元素5進行交換:此時有序區的元素增加到四個:以此類推,插入排序一共會進行(數組長度-1)輪,每一輪的結果如下:
什么意思呢?讓我們以第三輪舉例:
在第三輪操作中,我們需要讓元素3逐個與有序區的元素進行比較和交換,與8交換、與6交換、與5交換,最終交換到有序區的第一個位置。
但是我們并不需要真的進行完整交換,只需把元素3暫存起來,再把有序區的元素從左向右逐一復制。
第一步,暫存元素3:
第二步,和前一個元素比較,由于3<8,復制元素8到它下一個位置:第三步,和前一個元素比較,由于3<6,復制元素6到它下一個位置:第四步,和前一個元素比較,由于3<5,復制元素5到它下一個位置:第五步,也是最后一步,把暫存的元素3賦值到數組的首位:顯然,這樣的優化方法減少了許多無謂的交換。public static void sort(int[] array){ for(int i=1;i<array.length;i++){ int insertValue =array[i]; int j=i-1; //從右向左比較元素的同時,進行元素復制 for(; j>=0&&insertValue<array[j]; j--){ array[j+1]=array[j]; } //insertValue的值插入適當位置 array[j+1]=insertValue; } } public static void main(String[] args) { int array[]={12,1,3,46,5,0,-3,12,35,16}; sort(array); System.out.println(Arrays.toString(array)); }
如何少走彎路,利用不同區塊鏈的數據結構實現項目上鏈?
?
數據架構是區塊鏈的重要組成部分,了解數據架構,可以讓我們對于自身業務是否適合上鏈做出明智的判斷。
?
9月19日,【dfuse小聚:區塊鏈數據應用討論會】將在上海舉行,dfuse CTO&聯合創始人、EOS加拿大聯合創始人 Alex Bourget;慢霧科技合伙人兼安全產品負責人啟富(Keywolf);MYKET聯合創始人/EOS Cannon聯合創始人Ricky胖哥,與你一起深度探索區塊鏈應用搭建以及區塊鏈數據結構的奧秘,讓你明白到底你的業務該如何上鏈!
?
長按下方二維碼報名
???福利掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!推薦閱讀:
- HDC.2019后再發力,AppGallery Connect服務新升級
Docker是啥?容器變革的火花? - 算法一看就懂之「 堆棧 」
- 記一道字節跳動的算法面試題
火熱的云計算,你知道這些嗎? 假如從餐飲店的角度來看架構…? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
總結
以上是生活随笔為你收集整理的漫画:什么是插入排序?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为内测基于Android 10.0的E
- 下一篇: 以人为本、用“简”驭“繁”……统统都是新