数据结构--插入排序(InsertSort)思想与实现
来源:互联网 发布:网络显卡联机 编辑:程序博客网 时间:2024/06/05 17:39
在介绍插入排序的思想之前,说一下插入排序的一个重要的优点:插入排序只有在需要排序时才会排序。该算法的时间复杂度为:O(n^2),接下来我们来了解一下该排序的思想。
(1)插入排序的思想
插入排序的思想就是:从数组的下标为0的元素出发,每次向后取一个元素,将该元素插入到前面已排好的子数组中,以排升序为例,将所要插入的元素插在左边小于该元素和右边大于该元素之间的位置,进而形成新的子数组,直到所有元素全插进来为止。为了更好的理解,我们来看下面的图片:
由以上图片中我们知道,原数组的顺序为:5 2 3 8 1。接下来进行分步操作。
第一步:取数组第0个元素5,对5进行排序,结果形成了新的子数组为:5;
第二步:取数组的第1个元素2,将2插入第一步所得的子数组中,发现2应该放在5的左边,将2插入5的左边后,结果形成
了新的子数组为:2 5;
第三步:取数组的第2个元素3,将3插入第二步所得的子数组中,发现3应该放在2和5的中间,将3插入2和5的中间后,结
果形成了新的子数组为:2 3 5;
第四步:取数组的第3个元素8,将8插入第三步所得的子数组中,发现8应该放在5的右边,将8插入5的右边后,结果形成
了新的子数组为:2 3 5 8;
第五步:取数组的第4个元素1,将1插入第四步所得的子数组中,发现1应该放在2的左边,将1插入2的左边后,结果形成
了新的子数组为:1 2 3 5 8;
最后,由于插入了所有的元素,故排序结束。
(2) 插入排序的实现
本次实现采用C++的模版编程来完成该排序算法。
#include <iostream>#include <iterator>using namespace std;template<class T,size_t N>void PrintArr(T (&arr)[N]) {copy(arr,arr+N,ostream_iterator<T>(cout," "));cout << endl;}template<class T,size_t N>void InsertSort(T (&arr)[N]) {for(size_t i=0,j; i<N; i++) {T temp(arr[i]);for(j=i; j>0 and temp < arr[j-1]; j--) {arr[j] = arr[j-1];}arr[j] = temp;}}template<class SortFunc>void Test(SortFunc sort) {int arr[] = {5,2,3,8,1};cout << "InsertSort:"<<endl;sort(arr);PrintArr(arr);} int main(){Test(InsertSort<int,5>);}
原始数组为:5 2 3 8 1
程序运行结果为:1 2 3 5 8
阅读全文
0 0
- 数据结构--插入排序(InsertSort)思想与实现
- 数据结构-插入排序InsertSort
- 算法与数据结构--插入排序(InsertSort)
- 【数据结构】中的插入(InsertSort)排序
- 插入排序法(InsertSort)c++实现
- 插入排序(InsertSort)
- 插入排序(InsertSort)
- 插入排序(InsertSort)
- 插入排序算法(InsertSort)
- 插入排序(insertSort.cpp)
- 插入排序法(InsertSort)c++实现 ZT
- 插入排序之直接插入(InsertSort)
- 插入排序(Insertsort)之Java实现
- 插入排序(Insertsort)之Java实现
- 内部排序之插入排序(InsertSort)
- 插入排序思想与实现
- 插入排序InsertSort
- insertSort - 插入排序
- 1020. 月饼 (25)
- 工作一年心得
- Android第三天
- Hadoop集群环境的搭配
- linux常用命令(2)
- 数据结构--插入排序(InsertSort)思想与实现
- Codeforces 844 B Rectangles
- 错误:无法将文件XXXX.dll”复制到XXXX.dll。对路径xxx.dll”的访问被拒绝。dll”的访问被拒绝。
- MFC 获取MAC-IP-NetworkName
- 分布式事务,高并发下分布式事务的解决方案
- 自定义view——wrap_context
- Java8 ArrayList的实现
- Spring Boot : 定时任务(十)
- SpringMVC笔记