中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何直接插入排序算法

發布時間:2022-08-12 10:08:06 來源:億速云 閱讀:135 作者:iii 欄目:開發技術

今天小編給大家分享一下C語言如何直接插入排序算法的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1. 直接插入排序介紹

1.1 定義

直接插入排序是一種最簡單的排序方法,其基本操作是將一條記錄插入到已排好的有序表中,從而得到一個新的、記錄數量增1的有序表。

1.2 基本原理

每次從無序表中取出第一個元素,把它插入到有序表的合適位置,使有序表仍然有序。

第一趟比較前兩個數,然后把第二個數按大小插入到有序表中; 第二趟把第三個數據與前兩個數從后向前掃描,把第三個數按大小插入到有序表中;依次進行下去,進行了(n-1)趟掃描以后就完成了整個排序過程。

下面的動圖非常清晰的詮釋了直接插入排序的過程:

C語言如何直接插入排序算法

1.3 時間復雜度

時間復雜度

最好的情況是數組所有元素已經是有序排列,在排序時待排元素只需與前一元素比較,不用繼續往前搜索比較,時間復雜度為O(n);

最差的情況是數組所有元素全部反序,在排序時待排元素需要與前面所有有序元素進行比較,比較次數為:

1+2+…+(n-1) = n(n-1)/2

每次前面的有序元素均要往后移動,移動次數為:

(1+2)+(2+2)+…+(n-1+2) =(n-1)(n+4)/2

綜上所述,直接插入排序的平均時間復雜度為O( n 2 n^2 n2) 。

1.4 空間復雜度

直接插入排序為平行移動,因此空間復雜度為:O(1) 。

1.5 優缺點

優點:直接插入排序算法簡單,當待排序記錄數量n很小時,局部有序時,較為適用。

缺點:當數據量龐大并且亂序嚴重時,比較和移動次數多,排序效率低。

2. 代碼實現

2.1 代碼設計

a. 實現直接插入排序需要設計兩層循環,整個數組為外循環,已經排列好的有序元素為內循環;

b. 從外循環取出待排元素array[i],使用臨時變量temp存儲其值;

c. 將待排元素與內循環的有序元素依次(從后往前)進行比較,若有序元素比待排元素大,則向后移動一位;

d. 直至有序元素比待排元素小,則不再移動,將temp賦值給array[j+1]。

2.2 代碼實現

#include <stdio.h>
void printArray(int array[], int size) {
    int i;
    for (i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
}
void insertSort(int array[], int size) {
    int temp,i,j;
    for (i = 1; i < size; i++) {
        temp = array[i];
        j = i-1;
        while (j >= 0 && array[j] > temp) {
            array[j+1] = array[j];
            j--;
        }
        array[j+1] = temp;
        printArray(array, size);
    }
}
int main() {
    int array[] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
    printArray(array, sizeof(array)/sizeof(int));
    insertSort(array, sizeof(array)/sizeof(int));
    return 0;
}

運行結果:

3 44 38 5 47 15 36 26 27 2 46 4 19 50 48
3 44 38 5 47 15 36 26 27 2 46 4 19 50 48
3 38 44 5 47 15 36 26 27 2 46 4 19 50 48
3 5 38 44 47 15 36 26 27 2 46 4 19 50 48
3 5 38 44 47 15 36 26 27 2 46 4 19 50 48
3 5 15 38 44 47 36 26 27 2 46 4 19 50 48
3 5 15 36 38 44 47 26 27 2 46 4 19 50 48
3 5 15 26 36 38 44 47 27 2 46 4 19 50 48
3 5 15 26 27 36 38 44 47 2 46 4 19 50 48
2 3 5 15 26 27 36 38 44 47 46 4 19 50 48
2 3 5 15 26 27 36 38 44 46 47 4 19 50 48
2 3 4 5 15 26 27 36 38 44 46 47 19 50 48
2 3 4 5 15 19 26 27 36 38 44 46 47 50 48
2 3 4 5 15 19 26 27 36 38 44 46 47 50 48
2 3 4 5 15 19 26 27 36 38 44 46 47 48 50

以上就是“C語言如何直接插入排序算法”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南投市| 房产| 即墨市| 溧阳市| 黎川县| 宁波市| 界首市| 兴安盟| 金平| 广元市| 临湘市| 平遥县| 泾阳县| 阿尔山市| 大名县| 潮安县| 沿河| 科技| 沁源县| 建德市| 额尔古纳市| 绥江县| 杂多县| 吴旗县| 临泽县| 玛曲县| 黄大仙区| 姚安县| 盐边县| 偃师市| 河津市| 兰州市| 子洲县| 杭州市| 安西县| 金华市| 潼关县| 时尚| 黄冈市| 府谷县| 宝坻区|