插入算法到底是怎么样的呢?比如有十个人从左往右无序的拍着,现在要你按身高从低到高排序,你会怎么排序呢?
首先第二个人和第一个人比较,如果第二个人比第一个矮,那么他们互换位置,否则原地不动,此时前两个人就排序好了,然后第三个人再与前面两个人比较,第三人站出来,看看前面两人相比,哪个位置中自己比左边的高比右边的矮,然后就插进去,如果不是,就不动。,接下来就是这样排序。
那么怎么找到比左边高比右边矮的那个位置呢?因为左边都是已经排好了的,所以依次与左边的比较,直到运到一个比他矮的,那么这个位置就是比左边高比右边矮的位置。如果没找到,那么他就是最矮的那个,那么他排在最左边,那么怎么插入呢?因为每一个与左边一个一个比较的那个人都是先站出来,所以他的那个位置是空的。这个时候在找到比他矮的那个人之前,每比完一个,与他进行比较的那个人就往右挪一个位置,然后他就可以插进去了,所以在程序中要先用一个变量保存这个“站出来”的数
#include<stdio.h>
int main(void)
{
int i,j;
int temp; // 用于存站出来的数
int a[] = {900, 2, 3, -58, 34, 76, 32, 43, 56, -70, 35, -234, 532, 543, 2500};
int n = sizeof(a) / sizeof(a[0]);
for(i=1; i<n; i++)
{
temp = a[i]; //
j = i-1;// 与他前一个数比较
while(j>=0 && (a[j]>temp)) // 与左边所有人都比完了或者找到一个比他矮的为止
{
a[j+1] = a[j]; // 与他比完后,比他高的