一.java代碼部分
public static void Insert_Sort(int []array)
{
for (int i=1;i 0 &&temp< array[j - 1]; j--) {
array[j] = array[j - 1];
}
array[j]=temp;
}
}
二.代碼分析部分?
i變量 存儲的是待排序部分第一個元素的下標
temp 儲存的是數組下標為i的值
j變量 存儲的是需要插入的數組下標
插入排序中是將一個未排序的元素插入前面已經排序的部分 也就是說在實際循環中下標i之前的數組已經是有順序的了 所需要的只是在前面的有序數組中找到 一個位置合適的位置插入 依舊使的數組有序 就可以了?
首先
外層循環變量i從1開始 數組后面的9個元素需要進行插入操作 每次循環后已經排序的部分長度加1
? for (int i=1;i
temp 變量儲存待排序部分第一個元素的值
? int temp=array[i];
默認從小到大排序?
循環的判斷條件是如果temp小于下標j-1處的值?這個主要能夠確定 temp在哪里執行插入操作 循環直到temp大于等于下標j-1的值 說明下標為j的部分就是temp需要插入的地方?但是在數組中原本下標為j的部分就已經儲存了元素 這個就需要觀察這個循環體了
循環體?array[j] = array[j - 1]注意 在這次循環條件不滿足的時候這個j處表示是temp變量值插入的部分 但是這次循環的j處的值在j+1處已經有一份了 這個主要因為循環體在不滿足表達式的上一個循環中所做的操作??所以才可以直接將temp的值插入就去保證數據的完整性?
for ( j = i; j >0 &&temp< array[j - 1]; j--) { array[j] = array[j - 1]; }
最后部分就是在下標為j的部分插入元素
array[j]=temp;
? }
? }
具體效果如下
三.最好最壞情況分析?
最壞情況就是 數組是逆序的 時間復雜度為O()?
最好情況就是 數組已經是有序的了 那么內層循環條件始終為假 相當于沒有內層循環 時間復雜度為O(n)
平均時間復雜度??O()
四.用時時間測試
排序耗時分析需要用到一個方法 該方法是System類的靜態方法 返回值是Long型的具體是
System.currentTimeMillis();返回值是從1970年1月1日到現在的毫秒值?
? long begin = System.currentTimeMillis();
? ? ? ? Sort.Insert_Sort(array);
? ? ? ? long end=System.currentTimeMillis();
? ? ? ? // 記錄 多少毫秒
? ? ? ? long ms=(end-begin);
? ? ? ? System.out.println("\n運行時間排序"+max+"數字總共耗時"+ms+"毫秒");
時間測試
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
文章題目:插入排序java代碼和用時測試-創新互聯
文章路徑:http://newbst.com/article16/dgiidg.html
成都網站建設公司_創新互聯,為您提供網站策劃、電子商務、標簽優化、ChatGPT、云服務器、移動網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯