C程式設計——插入排序
阿新 • • 發佈:2018-12-25
1、程式檔案
#include <stdio.h> // 交換 void mySwap(int *a, int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } // 列印 void myPrint(int *a, int len) { int i; for (i = 0; i < len; i++) { printf ("%4d", a[i]); } printf ("\n"); } // 插入排序 void mySort(int *a, int len) { int i; // 在一個已經排好序的數組裡插入新元素 // 只取數組裡的第一個元素,然後把第二個元素往第一個元素裡面插 // 從後往前找第一個比它小的元素 // 一邊迴圈,一邊找位置 // 元素不符合要求就將其後移 // 符合要求就不移 // 先是第一個元素有序,插入後,變成兩個元素有序 for (i = 1; i < len; i++) { // 將當前下標為i的陣列元素的值儲存在get裡 int get = a[i]; // 把get的前一元素通過j儲存下來 int j = i - 1; // j >= 0 ==> 防止越界 // 一旦get儲存的值,遇到更小的a[j]就退出 // 然後在j+1位置處插入get // 或者迴圈到陣列首元素/已遍歷其之前的所有元素 while (j >= 0 && get < a[j]) { // 把較大值後移 // 或者說是把不符合條件的值後移 // 把比get大的值後移 // 拿get和a[j]進行比較,只要比get大,就把a[j]後移 // 移完後空出的位置,插入get a[j+1] = a[j]; j--; } // a[j]的位置是比get小的位置 // 插在其後的位置 a[j+1] = get; } } int main() { int a[] = {9,8,7,6,5,4,3,2,1,0}; int len = sizeof(a)/sizeof(a[0]); mySort(a, len); myPrint(a, len); return 0; }
2、測試結果
[email protected]:/mnt/hgfs/shared-lj# gcc 插入排序study.c
[email protected]:/mnt/hgfs/shared-lj# ./a.out
0 1 2 3 4 5 6 7 8 9