插入排序算法

2019-05-11 19:40:02阅读 106评论 0

思路

简单理解其实相当于我们手里有5张扑克牌,需要对这5张牌进行从小到大排序。

这5张牌组成一个数组Array;

第一轮

拿到第二张牌(Array[1]),存在一个变量里,即temp=Array[1];

和第一张牌(Array[0])进行比较,如果比第一张牌小,与第一张牌换位置,否则跳过进入第二轮。

如何换位置?

Array[1] =Array[0] ,接着Array[0]=temp。

第二轮

拿到第三张牌(Array[2]),存在一个变量里,即temp=Array[2];

先和第二张牌(Array[1])进行比较,如果比第二张牌小,与第二张牌换位置,否则继续;

然后再与第一张牌 Array[0]进行比较,如果比第一张牌小,与第一张牌换位置,否则进入第三轮。

第三轮

拿到第四张牌(Array[3]),存在一个变量里,即temp=Array[3];

先和第三张牌(Array[2])进行比较,如果比第三张牌小,与第三张牌换位置,否则继续;

接着和第二张牌(Array[1])进行比较,如果比第二张牌小,与第二张牌换位置,否则继续;

然后再与第一张牌 Array[0]进行比较,如果比第一张牌小,与第一张牌换位置,否则进入第四轮。

……

即循环到的位置,与前面所有的牌进行比较,并换位置,最终使得整个数组(手里的牌),按从小到大排序。

实现

以下是C语言实现的代码

```c

void *selectSort(int *ar,int length)   
{  

    int i, j;//声明循环体初始值  
    int temp;//声明暂存变量,相对于现在拿到右手的扑克牌  
    for (i = 1; i < length; i++) {  
        j = i;  
        temp = ar[i];  
        while (j > 0 && ar[j - 1] > temp) {  
            ar[j] = ar[j - 1];  
            j--;  
        }  
        //同前面已排好的扑克牌依次比较,找到要插入的位置  
        ar[j] = temp;  
    }  
    return 0;  

}


int main()  
{  
    int ar[5] = {5,3,4,2,1};//定义一个数组  
    selectSort(ar,5);//调用排序函数  

    for (int i = 0; i < 5; i++) {  
        printf("%d",ar[i]);  
    }  
    //循环并打印数组里的每一个数  

    system("PAUSE");  


}

```

还没有评论,来说两句吧