排序算法之插入排序(C语言实现)
2015-08-25 15:57
337 查看
插入排序的(Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增一的有序表。
基本思想:
假如待排序的记录存放在数组A[0,1....n-1]中。初始时,A[0]自成一个有序区,无序区为A[1,2....n-1],从i=1起直到i=n-1,依次将A[i]插入到有序区A[0,..i-1]中,完成排序
基本步骤:
将待插入记录A[i]赋值给临时变量temp,temp从右往左依次与有序区中记录A[j-1](j=i,i-2,...,1)比较:
1.若A[j-1]>temp,则将A[j-1]后移一个位置
2.若A[j-1]<=temp,则查找过程结束,j即为A[i]插入的位置
实现代码:
时间复杂度:
若原始数据为顺序排列,则时间复杂度为O(n);
若原始数据为逆序排列,则时间复杂度为O(n2);
平均时间复杂度为O(n2)。
基本思想:
假如待排序的记录存放在数组A[0,1....n-1]中。初始时,A[0]自成一个有序区,无序区为A[1,2....n-1],从i=1起直到i=n-1,依次将A[i]插入到有序区A[0,..i-1]中,完成排序
基本步骤:
将待插入记录A[i]赋值给临时变量temp,temp从右往左依次与有序区中记录A[j-1](j=i,i-2,...,1)比较:
1.若A[j-1]>temp,则将A[j-1]后移一个位置
2.若A[j-1]<=temp,则查找过程结束,j即为A[i]插入的位置
实现代码:
#include<stdio.h> #include<stdlib.h> void InsertionSort(int A[],int len) { int i,j,temp; for(i=1;i<len;i++) { temp = A[i];//找到temp的插入位置 for(j=i;j>0 && A[j-1]>temp;j--) A[j] = A[j-1]; A[j] = temp; } } int main() { int n; while(scanf("%d",&n) != EOF) { int *A = (int *)malloc(n*sizeof(int)); int i; for(i=0;i<n;i++) scanf("%d",A+i); InsertionSort(A,n); for(i=0;i<n;i++) printf("%d ",A[i]); free(A); A = NULL; } return 0; }
时间复杂度:
若原始数据为顺序排列,则时间复杂度为O(n);
若原始数据为逆序排列,则时间复杂度为O(n2);
平均时间复杂度为O(n2)。
相关文章推荐
- c语言与c++区别
- 二叉树遍历
- 使用C语言判断英文字符大小写的方法
- C++11引用临时变量的终极解析
- C++ List 双向链表 实现 会用也要会写
- 成员函数指针与高性能的C++委托
- C++中的引用在初始化时占用内存吗?
- 关于Azure Storage 的一点研究
- C语言的字符串倒置问题
- C++11新特性
- C++成员初始化列表
- C++数组和函数中的指针
- C++数组和函数中的指针
- c++中类对象不能访问类的私有成员变量
- c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目
- c++中的array数组和vector数组
- C++运行时类型识别——RTTI
- C++中各种类型的成员变量的初始化方法
- C++异常机制
- C语言切换壁纸和播放音乐