八大排序(一)插入排序(C語言)

2021-09-11 08:51:27 字數 1564 閱讀 1171

一、插入排序

(一)直接插入排序

1.向一組有序的資料中插入乙個數;

2.預設第乙個資料有序,將第乙個資料以後的所有資料視為待排序資料,從待排序的資料中依次選取乙個資料,對有序的資料從後向前遍歷,直到找到第乙個比要插入的資料小的資料,將該數後面的資料均向後移動一位,,將要插入的資料放在該數的後面,形成新的有序數列。直至將所有的資料均插入到陣列中,則排序完成。**如下:

#include int main()

; //待排序的陣列

int i, j, temp, len;

len = sizeof(arr) / sizeof(int); //獲得陣列中數的個數

for(i = 1; i < len; i++) //插入資料

arr[j+1] = temp;

}for(i = 0; i < len; i++) //遍歷排序後的陣列

printf("\n");

return 0;

}

(二)折半插入

折半插入排序是採用折半查詢法來尋找插入位置的插入排序方法。

**如下:

#include int main()

; //待排序列

int i, j, temp, len, up, low, mid;

len = sizeof(arr) / sizeof(int); //序列長度

for(i = 1; i < len; i++)

else

}for(j = i;j >= low + 1;j--) //插入點以後的資料均向後移動一位,空出插入位置

arr[low] = temp; //插入資料

}for(i = 0; i < len; i++) //遍歷排序後的序列

printf("\n");

return 0;

}

(三)希爾排序

1、希爾排序利用了插入排序的簡單,同時又避免了插入排序每次只能消除乙個逆序對的缺點。希爾排序不是改變相鄰元素,而是跳躍一段距離改變。

2、步長也稱增量,是希爾排序中最有特色,且重要的概念;

它決定排序的分組,決定演算法的優劣程度,與時間複雜度緊密相關;

**如下:

#include void sort(int arr, int len)

} step = step/2; }}

int main()

; int i = 0;

for(i = 0; i < 10; i++)

printf("排序前:\n");

for(i = 0; i < 10; i++)

putchar(10);

sort(arr, 10);

printf("排序後: \n");

for(i = 0 ; i < 10; i++)

putchar(10);

return 0;

}

八大排序演算法之一插入排序

基本思想 將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的...

八大排序之插入排序

插入排序基本思想是每一步將乙個待排序的記錄,插入到前面已經排好序的有序序列中去,直到插完所有元素為止。1.時間複雜度 插入演算法,就是保證前面的序列是有序的,只需要把當前數插入前面的某乙個位置即可。所以如果陣列本來就是有序的,則陣列的最好情況下時間複雜度為o n 如果陣列恰好是倒 倒序,比如原始陣列...

八大排序演算法之插入排序

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量資料的處理方面。乙個優秀的演算法可以節省大量的資源。在各個領域中考慮到資料的各種限制和規範,要得到乙個符合實際的優秀...