每次在現有已經排好的數組的基礎上排入一個新的數組項。數組
function insertionSort(arr) { const len = arr.length; for (let i = 1; i < len; i++) { //在arr[0,...,i-1]中插入arr[i] const toInsertValue = arr[i]; let j; for (j = i; j >0 && arr[j-1] > toInsertValue; j--) { //找到一個比arr[i]大的項,就把這個項日後挪一項。由於最後一項就是toInsertValue,因此該值一直能夠經過toInsertValue訪問,故也沒必要另作保存。 arr[j] = arr[j-1]; } arr[j] = toInsertValue;//內循環結束獲得的arr[j-1]是第一個比arr[i]小的值,那麼就把arr[i]存儲在此處的arr[j]上。而以前的arr[j]已經在上一輪循環中存儲到了arr[j+1]中 } }
#include<stdio.h> #include<stdlib.h> void insertion(int *list,int n) { int i,j,t; for(i=1;i<n;i++)//待插入的是list[1]到list[n-1] { if(list[i]<list[i-1]) { t=list[i]; list[i]=list[i-1]; j=i; while(t<list[j-1]&&j>=1) { list[j]=list[j-1]; j--; } list[j]=t; } } } main() { int list[10],n=10,i; printf("請輸入10個整數:\n"); for(i=0;i<10;i++) { scanf("%d",&list[i]); } insertion(list,10); for(i=0;i<10;i++) { printf("%d\t",list[i]); } system("pause"); }