插入排序-参考MoreWindows
来源:互联网 发布:access 导入excel sql 编辑:程序博客网 时间:2024/06/06 07:08
1插入排序与平时打牌一样,打牌的时候右手起到牌后,往左手的的有序的牌插入,插入排序也是一样的。比如有n个节点。a[0]---a[i-1]节点有序,把a[i]个节点插入到有序节点中。在这个过程中有两个关键:1找出 第a[i]节点在a[0]---a[i-1]中的位置。2把位置之后的元素后移一个位置,空出个坑,以便a[i]插入。
关键点一找位置用一个for循环即可。关键点二也用一个for循环。
代码1:找位置:
关键二是 元素后移:
总体代码:
#include <iostream>using namespace std;void InsertSortOperation(int a[],int n){int i,j;for ( i=1;i<n;i++){for ( j=i-1;j>=0;j--){if (a[j]<a[i])break;} //位置找到 插入位置为 j+1位置if (j!=i-1) //当j发生变化的时候,需要移动元素 //写上效率会高一点点,也符合思考的逻辑{int k;int tmp=a[i];for(k=i-1;k>j;k--){a[k+1]=a[k];}a[k+1]=tmp;}}}void main(){int a[]={4,3,7,5,9,1,2,17,23,11}; InsertSortOperation(a,10);for (int i=0;i<10;i++){cout << a[i] <<" ";}}
2将搜索和后移两部合在一起,将temp=a[i],j=i-1; while(a[j]>a[i]) j-- a[j+1]=a[j]
void InsertSortOperation(int a[],int n){int i,j;for ( i=1;i<n;i++){int temp=a[i];if (a[i-1]>a[i]) // if(a[i-1]<a[i]) 无须调整{j=i-1;while (j>=0&&a[j]>temp){a[j+1]=a[j];j--;}a[j+1]=temp;}}}
或者用两个for循环:两个的思想是一样的。令j=i-1,temp=a[i] 一遍将数据后移,一边向前搜索。当有数据a[j]<a[i]时停止并将temp放到a[j+1]处
void InsertSortOperation(int a[],int n){int i,j;for ( i=1;i<n;i++){if (a[i-1]>a[i]) //有这个条件更符合逻辑 if(a[i-1]<a[i])的时候,就不用费神比较移动了{int temp=a[i];for (j=i-1;j>=0&&a[j]>temp;j--){a[j+1]=a[j];}a[j+1]=temp;}}}
3用数据交换代替元素移动,
void InsertSortOperation(int a[],int n){int i,j;for ( i=1;i<n;i++){for (j=i-1;j>=0&&a[j]>a[j+1];j--)//a[j]>a[j+1] 相邻两元素比较swap(a[j+1],a[j]);}}
0 0
- 插入排序-参考MoreWindows
- 排序之冒泡排序--参考MoreWindows
- 基于MoreWindows整理的基础排序的个人理解
- MoreWindows白话经典算法之七大排序总结篇
- 数据结构之插入排序之希尔排序(缩小增量排序)—参考整理严蔚敏数据结构
- 插入排序-【插入排序】
- 总结下排序算法——MoreWindows白话经典算法之七大排序总结篇
- 白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
- 白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
- 白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
- MoreWindows 专注于Windows编程 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
- 堆排序 原文地址:http://blog.csdn.net/morewindows/article/details/6709644
- 【白话经典算法系列之八】 MoreWindows白话经典算法之七大排序总结篇
- 白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
- 白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
- 白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
- 白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
- LeetCode Solutions : Sqrt(x)
- User client windows logon basic data
- poj 1961 Period(数据结构:KMP)
- 【OpenGL 学习笔记04】顶点数组
- 『IOS』Xcode工程中 添加AFNetworking出错_SecCertificateCreateWithData _SecTrustGetCertificateCount
- 插入排序-参考MoreWindows
- 【第四回】新手入门OCCT的一条学习主干线
- JAVA反射机制
- ubuntu编译qt5.3 WebKit
- SDUT Pots 2780
- CSS样式实践篇
- 自定义控件或布局如何传属性值
- Javascript 面向对象编程(一):封装
- POJ1009