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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【大话数据结构算法】直接插入排序

發布時間:2024/4/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【大话数据结构算法】直接插入排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

直接插入排序的基本思想:每趟將一個待排元素作為關鍵字,按照其關鍵字值得大小插入到已經排好序的部分序列的適當位置,直到插入完成


算法思想總結如下:(設待排序的數組為a[0…n-1])

1、初始時,a[0]就是第一個有序區間,無序區間為a[1…n-1];
2、將a[i]并入當前的有序區a[0…i-1]中形成a[0…i]的有序區間;
3、i++并重復第二步,知道i=n-1,此時排序完成。


直接插入排序基本算法實現如下

void insertSort1(int[] a,int n){int i,j,temp;//第一個元素有序,所以從第二個開始處理for (i = 1; i < n; i++) {temp = a[i];//將待排元素暫存于temp中j = i - 1;//從待排元素之前的元素開始掃描,如果大于待排元素,則后移一位while(j >= 0 && a[j] > temp){a[j + 1] = a[j];j--;}//找到插入位置,將temp中暫存的待排元素插入a[j + 1] = temp;}}

java代碼實現如下

public class InsertSort {public static void main(String[] args) {int[] a = {5,2,9,6,8,4,3,0};insertSort1(a,8);for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}System.out.println("**************");int[] b = {5,2,9,6,8,4,3,0};insertSort2(b,8);for (int i = 0; i < b.length; i++) {System.out.println(b[i]);}}public static void insertSort1(int[] a,int n){int i,j,temp;//第一個元素有序,所以從第二個開始處理for (i = 1; i < n; i++) {temp = a[i];//將待排元素暫存于temp中j = i - 1;//從待排元素之前的元素開始掃描,如果大于待排元素,則后移一位while(j >= 0 && a[j] > temp){a[j + 1] = a[j];j--;}//找到插入位置,將temp中暫存的待排元素插入a[j + 1] = temp;}}public static void insertSort2(int[] a, int n){int i,j;for (i = 1; i < n; i++) {if (a[i] < a[i-1]) {int temp = a[i];for (j = i-1; j >= 0 && a[j] > temp; j--) {a[j+1] = a[j];}a[j+1] = temp;}}} }

時間復雜度

考慮最壞的情況,即整個序列式逆序的,則內層循環temp < a[j]這個條件是始終成立的。此時,對于每一次外層循環,最內層循環的執行次數(也就是基本操作a[j+1] = a[j] 的執行次數)達到最大值,為i次,i的取值范圍為2~n,由此可得基本操作總的執行次數為n(n-1)/2,時間復雜度為O(n2){n的平方}

考慮最好的情況,即整個序列已經是有序序列,則對于內層循環temp < a[j]這個條件是始終不成立的。此時內層循環始終不執行,時間復雜度為**重點內容**0(n)。


空間復雜度

由算法代碼可知,算法所需的額外空間只有一個temp,因此它的空間復雜度為0(1)

總結

以上是生活随笔為你收集整理的【大话数据结构算法】直接插入排序的全部內容,希望文章能夠幫你解決所遇到的問題。

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