直接插入排序法
来源:互联网 发布:美工刀片有几种型号 编辑:程序博客网 时间:2024/04/29 10:46
直接插入排序法是一种简单的排序方法,它的基本思想就是把一个元素按升序或降序插入已经有序的一个序列里面,插入后保持序列的有序。假设有序列data[1..n],则将data[2]插入data[1..1]中,将data[3]插入data[1..2]中,将data[4]插入data[1..3]中。如此经过n-1次的插入,便可以使data[1..n]有序。
一次直接插入排序的算法如下:
template<typename T>
void straipass(T *data,unsigned pos)
...{//一趟直接插入排序
//假设data[0..pos-1]是有序序列(data[i]<=data[i+1]),现将data[pos]插入data[0..pos-1]序列中,并保持有序
T x = data[pos];
int i = pos-1;
//按升序排列,如果按降序排序则用(data[i] < x)
for(; (i>=0) && ( data[i] > x ); i--)
...{
data[i+1] = data[i];
}
data[i+1] = x;
}
void straipass(T *data,unsigned pos)
...{//一趟直接插入排序
//假设data[0..pos-1]是有序序列(data[i]<=data[i+1]),现将data[pos]插入data[0..pos-1]序列中,并保持有序
T x = data[pos];
int i = pos-1;
//按升序排列,如果按降序排序则用(data[i] < x)
for(; (i>=0) && ( data[i] > x ); i--)
...{
data[i+1] = data[i];
}
data[i+1] = x;
}
对于任何一次序列,我们只要经过n-1次插入便可实现排序:
template<typename T>
void straisort(T *data,unsigned len)
...{//直接插入排序
for(unsigned i=1; i<len; i++)
...{
straipass( data, i );
}
}
void straisort(T *data,unsigned len)
...{//直接插入排序
for(unsigned i=1; i<len; i++)
...{
straipass( data, i );
}
}
调用方法如下:
int _tmain(int argc, _TCHAR* argv[])
...{
int arr[] = ...{100,5,1,3,11,3,6,-1};
straisort( arr, sizeof(arr)/sizeof(arr[0]) );
return 0;
}
...{
int arr[] = ...{100,5,1,3,11,3,6,-1};
straisort( arr, sizeof(arr)/sizeof(arr[0]) );
return 0;
}
- 直接插入排序法
- 直接插入排序法
- 直接插入排序法
- 直接插入法排序
- // 直接插入排序法
- 直接插入排序法
- 直接插入排序法
- 直接插入法排序
- 直接插入法排序
- 直接插入排序法
- 直接插入排序法
- 直接插入排序法
- 直接插入排序法
- 直接插入法排序
- 直接插入排序法
- java 直接插入排序法
- 数据结构 - 直接插入排序法
- 算法---直接插入排序法
- 如何用js获取地址栏的URL的域名
- JAVA编程/WAS对多语言(双字节)的支持
- C++编程规范之类型安全(读书笔记)
- 深圳印象
- Java精确截取字符串
- 直接插入排序法
- 论文投出去了,阿门!
- wxWidgets:ODBC数据源的动态创建(VC2005)
- Windows深输入法编程
- 安全抵达!
- & 运算符重载以后 一个有趣的程序
- 对于人类和机器都有意义的 Web,第 1 部分: 人类如何共享 Web 的财富
- 我的电脑盘符打不开怎么办??
- 关于二维数组指针的问题?