插入排序详解(C语言实现) c语言堆排序代码详解
插入算法:
以从小到大排序为例
假想,数组已经是有序的,要往数组中插入一个数.
故,只需查找到比要插入的数大的数组元素且在数组中最小的元素.然后插入在这个数组元素之前.
所以可以从数组的第二个元素开始查找(即下标为1的).依次递增
查找的数组元素满足条件(即比插入的数大的数组元素且下标大于0),交换数组元素的值到下个下标位置.
直到不满足条件,即找到了比要插入的数大的数组元素且在数组中最小的元素.就可以插入元素了
1.用一个循环控制数组中要插入的元素. for(i=1;i<n;i++)
2.用一个循环查找要插入的数在数组中的位置. 直到找到比要插入的数大的数组元素&&在数组中最小的元素&&下标大于0for(j=i;j>0 &&a[j-1]>key;j--)
3.插入元素 a[j] = key;
#include<stdio.h>
#define MAX 8
int main(void)
{
int a[MAX]={8,7,6,5,4,3,2,1};
int i;
void insert(int*a,int n);//函数声明
insert(a,MAX);
printf("after:n");
for(i=0;i<8;i++)
{
printf("%d ",a[i]);
}
printf("n");
return 0;
}
void insert(int *a,int n)
{
int i,j,key;
for(i=1;i<n;i++)//控制需要插入的元素
{
key=a[i]; //key为要插入的元素
for(j=i;j>0 &&a[j-1]>key;j--) //查找要插入的位置,循环结束,则找到插入位置
{
a[j] = a[j-1]; //移动元素的位置.供要插入元素使用
}
a[j] = key; //插入需要插入的元素
}
}
由于嵌套循环的每一个都花费 N次迭代,因此插入排序 为 O(N的2次方);
在另一方面.如果数据是已经排序好的.则运行时间只要O(N),因为内层的for检测总是判定不成立的
所以需要知道插入排序的平均运行时间. 即为 O(N的2次方);
转载请注明出处: http://blog.sina.com.cn/u/1835498344
http://weibo.com/1835498344
更多阅读
Adobe Premiere Pro CS4 序列号 premiere pro cs4破解
Adobe Premiere Pro CS4 序列号 ?单单是输入序列号是没什么效果的下次打开 还是会提示你 输入序列号 ??在输入序列号之前添加一段代码就完美了操作如下图选择试用安装安装完成打开 运行一次 然后关闭打开C盘文件 添加代码
安卓手机狂野飙车8数据包放哪 数据包说明 狂野飙车8含数据包
上网搜最新版的狂野飙车8数据包手机通过数据线连接电脑或者内存卡通过数据线(或读卡器)插入电脑将解压出来的数据包放在 SD卡Androidobbcom.gameloft.android.ANMP.GloftA8HM
用flash8制作MV方法举例:小城故事
用flash8制作MV方法举例:小城故事制作技巧要点1.插入音乐,缩小文件体积2.插入按钮,简单交互语言3.插入文字,歌词歌声同步4.插入图片,多种转场方法效果图:
Perry佩利电气PerryElectric_Hello_World c语言hello world代码
Perry佩利电气PerryElectricPerry佩利无线温度控制器wirelesstemperaturecontrolequipmentPerry佩利壁装有线温度控制器wallmountedwiredtemp.controlequipmentPerry佩利控制盒WiredControlBoxesPerry佩利模块化恒温器dinmodul
DBGrid及ListView点击标题栏自动排序 listview 点击排序
一、DBGrid点击标题栏自动排序1、建立私有变量,控制排序方向与排序字段privateFSort, FSortField: String; //控制Grid排序2、在titleClick中写排序代码procedure TfrmuZhutiZhiBiaoDataInput.DBGridEhInputTitleClick(Column: TColu