C語言直接插入排序算法
1.算法模板
void InsertSort(SqList *L) { int j; for (int i = 2; i <= L->length; i ++ ) { if (L->arr[i] < L->arr[i-1]) { L->arr[0] = L->arr[i]; // 設(shè)置哨兵 for (j = i - 1; L->arr[j] > L->arr[0]; j -- ) L->arr[j + 1] = L->arr[j]; L->arr[j + 1] = L->arr[0]; } } }
2.算法介紹
直接插入排序的基本思想是:對于一個長度為n的序列,從第2的元素開始,逐個向之前排好的序列中插入新元素(第1個元素可以視為一個長度為1的有序的子序列),從而得到一個長度為n的有序的序列。
算法的時間復(fù)雜度為O(n^2),最好的情況為待排序列本身就是有序的,只需要遍歷一遍,時間復(fù)雜度為O(n),最壞的情況為逆序,時間復(fù)雜度為O(n*n),由于元素之間是逐個進行比較的,直接插入排序是一種穩(wěn)定的排序算法。
3.實例
#include <iostream> using namespace std; const int N = 100; typedef struct { int arr[N]; int length; } SqList; void InsertSort(SqList *L) { int j; for (int i = 2; i <= L->length; i ++ ) { if (L->arr[i] < L->arr[i-1]) { L->arr[0] = L->arr[i]; // 設(shè)置哨兵 for (j = i - 1; L->arr[j] > L->arr[0]; j -- ) L->arr[j + 1] = L->arr[j]; L->arr[j + 1] = L->arr[0]; } } } int main() { SqList L; L.arr[1] = 50; L.arr[2] = 10; L.arr[3] = 90; L.arr[4] = 30; L.arr[5] = 70; L.arr[6] = 40; L.arr[7] = 80; L.arr[8] = 60; L.arr[9] = 20; L.length = 9; InsertSort(&L); for (int i = 1; i <= L.length; i ++ ) cout << L.arr[i] << " "; }
總結(jié)
到此這篇關(guān)于C語言直接插入排序算法的文章就介紹到這了,更多相關(guān)C語言插入排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MFC擴展DLL中導(dǎo)出類和對話框的實現(xiàn)方法
這篇文章主要介紹了MFC擴展DLL中導(dǎo)出類和對話框的實現(xiàn)方法,詳細講述了實現(xiàn)擴展DLL中導(dǎo)出類和對話框的具體步驟與方法,具有不錯的實用價值,需要的朋友可以參考下2014-10-10C語言for循環(huán)嵌套for循環(huán)在實踐題目中應(yīng)用詳解
初學(xué)C語言,常常遇到for循環(huán)中嵌套個for循環(huán),初學(xué)者對于這種形式總是一知半解,這次我就整理了常見的for循環(huán)嵌套for循環(huán)的題目,我們一起爭取一舉拿下這類題。學(xué)廢他們,以后再見到就不怕啦!每天都要學(xué)一點呀。加油,奮斗的我們2022-05-05基于大端法、小端法以及網(wǎng)絡(luò)字節(jié)序的深入理解
本篇文章是對大端法、小端法以及網(wǎng)絡(luò)字節(jié)序進行了詳細的分析介紹,需要的朋友參考下2013-05-05