一、插入排序
(一)直接插入排序
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 如果陣列恰好是倒 倒序,比如原始陣列...
八大排序演算法之插入排序
所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量資料的處理方面。乙個優秀的演算法可以節省大量的資源。在各個領域中考慮到資料的各種限制和規範,要得到乙個符合實際的優秀...