/*
*插入排序理论我就不写了,网络上应该多的是,比我要好。
*今天练习一下插入排序,插入排序还是比较稳定的一个算法,不算太坏。适用于少量数据
*在最坏情况下才是O(n^2),最好情况O(n),因为最好情况下,不需要内排序了呀。
*为了惩罚自己,再写一遍,还是写到熟练吧,额额。。。
*/
/*
**************开始了,再来一遍,写到熟练为止。
*********换了一个思路********
void sort(int a[],int length){
   for(int i=1; i<length; i++){
      int max = a[i];
	  int j=i;//j变成‘i’了
	  while(j>0 && max<a[j-1]){
	     a[j] = a[j-1];
		 j--;
	  }//while
	  a[j] = max;
   }
}
void sort(int a[],int length){
   for(int i=1; i,lengthl;i++){
      int max = a[i];
	  int j = i;
	  for(;j>0;){
	     if(max<a[j-1]){//比较
		    a[j]=a[j-1];
			j--;
		 }
		 else {
		    break;//不满足就要跳出了。
		 }//ifEnd
	  }//forEnd
	  a[j] = max;
   }//fiorEnd
}
*/
#include <stdio.h>
#include "stdlib.h"
void  sort(int a[], int length){//插入排序
	for (int i = 1; i < length; i++){//循环遍历
		int temp = a[i];//假设a[i]是最大元素呢*——*
		int j =i-1;//用a[i]和剩下的元素比较
		//今天这里没有整明白,有点尴尬*__*
		//是和max比较大小,不要整错了,你的目的就是用temp和剩下的元素比较
		while (j >=0 && temp<a[j]){//
			    a[j+1] = a[j];//交换值,因为满足条件,a[i]就不是最大的了。所以要换位置了,但要用temp临时保存a[i],因为后面要用到。
			    j--;
		}//forEnd
		a[j+1] =temp ;//如果搞不清,就把j带入j+1,等于i。可以当个结论记一下。
	}//forEnd
}
int main()
{
	//写的实在有点烂了,这个测试运行,可以改进一下,不算太难。
	int a[] = {1,5,0,3,9,4};
	sort(a,6);
	for (int i = 0; i < 6;i++){
		printf("%d\t",a[i]);
	}
	return 0;
}
 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号