1、什麼是直接插入算法?算法
直接插入排序是一種簡單的插入排序法,其基本思想是:把待排序的紀錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中,直到全部的紀錄插入完爲止,獲得一個新的有序序列。數組
選擇排序對大小爲N的無序數組R[N]進行排序,進行N-1輪選擇過程。首先將第1個元素做爲已經排序好
的子數組,而後將剩餘的N-1個元素,逐個插入到已經排序好子數組;。所以,在第 i輪排序時,前i個
元素老是有序的,將第i+1個元素插入到正確的位置。ide
2、算法實現過程:spa
第1輪
[ 3 ] [ 2 4 1 ] (最初狀態,將第1個元素分爲排序好的子數組,其他爲待插入元素)
[ 3 ] [ 2 4 1 ] (因爲3>2,因此待插入位置j=1)
[ 2 3 ] [ 4 1 ] (將2插入到位置j)
第2輪
[ 2 3 ] [ 4 1 ] (第1輪排序結果)
[ 2 3 ] [ 4 1 ] (因爲2<4,因此先假定j=2)
[ 2 3 ] [ 4 1 ] (因爲3<4,因此j=3)
[ 2 3 4 ] [ 1 ] (因爲4恰好在位置3,無需插入)
第3輪
[ 2 3 4 ] [ 1 ] (第2輪排序結果)
[ 2 3 4 ] [ 1 ] (因爲1<2,因此j=1)
[1 2 3 4 ] (將1插入位置j,待排序元素爲空,排序結束)排序
3、C語言程序代碼
#include<stdio.h>
int main(void)
{
int i;
int a[10]={2,4,6,8,0,1,3,5,7,9};
printf("原數組爲:");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n") ;
crpx(a,10);
printf("排序後的數組爲:");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
int crpx(int *a,int n)
{
int in,out,tmp;
for(out=1;out<n;out++)
{
tmp=a[out];
in=out;
while(in>0&&a[in-1]>tmp)
{
a[in]=a[in-1];//大的數向後移一位
in--;
}
a[in]=tmp;
}
}it