日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二分排序

發布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二分排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接觸到二分排序是在看二叉樹的資料里,又看到了二分排序。

產生了好奇心,所以就決定先理解二分排序,以下是代碼 ,按照我的理解對其進行了分塊注釋。

最后,對和我一樣第一次看算法的,我更建議先去看懂二分查找,那二分排序就很簡單了。

public class Main {public static void main(String[] args) {int[] a = { 2, 5, 6, 9, 7, 4, 3 };int i, j;int left, right, mid;int temp;for (i = 1; i < a.length; i++) {/* 找到數組中第一個無序的數,保存為temp */if (a[i] < a[i - 1]) {temp = a[i];} else {continue;}/* 找到數組中第一個無序的數,保存為temp *//* 二分查詢開始 */left = 0;right = i - 1;while (left <= right) {mid = (left + right) / 2;if (a[mid] > temp) {right = mid - 1;} else {left = mid + 1;}}/* 二分查詢結束,此時a[left]>=a[i],記錄下left的值 *//* 將有序數組中比要插入的數大的數右移 */for (j = i; j > left; j--) {a[j] = a[j - 1];}/* 將有序數組中比要插入的數大的數右移 */// 將left位置賦值為要插入的數a[left] = temp;}for (int v = 0; v < a.length; v++) {System.out.print(a[v] + " ");}} }

大致講一下我的理解吧,希望能幫助到后面的人。


大致思路是
一個無序數組,一定是有序然后無序,找到無序的第一個數
將該數插入前面的有序數組中,對后面的數依次循環插入前面的有序數組,完成排序。


具體實現是
1.找到有序數組后面第一個數記為temp,記下數組坐標i
2.二分查找找到有序數組中比temp大的數,記下下標left
3.把有序數組中所有比temp大的數右移一位,從a[i]=a[i-1]一直到a[left+1]=a[left]
4.a[left]=temp


簡單的舉例為
最開始數組:2,5,6,9? ?7,4,3??
第一次插入:2,5,6,7,9,? ?4,3
第二次插入:2,4,5,6,7,9? ?3
第三次插入:2,3,4,5,6,7,9

很容易看出,這只是一個插入的方法,甚至可以說,二分排序僅僅是二分查找+插入的組成。


總結

以上是生活随笔為你收集整理的二分排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。