插入排序算法
思路
简单理解其实相当于我们手里有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");
}
```
还没有评论,来说两句吧
