/*

*插入排序理论我就不写了,网络上应该多的是,比我要好。
*今天练习一下插入排序,插入排序还是比较稳定的一个算法,不算太坏。适用于少量数据
*在最坏情况下才是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;
}

posted on 2017-11-05 16:18  小菜鸟要长大  阅读(156)  评论(0编辑  收藏  举报