数据结构-练习 11 冒泡排序 插入排序 归并排序
2013-06-12 18:56
489 查看
本博文介绍三中最基本的排序算法,冒泡,插入,归并。
一,冒泡:最简单,也是最直接的排序算法,从前往后,每个元素都与其后满足条件的元素交换。时间复杂度O(N^2)。
代码如下:
二,插入:对于前面已排好的序列,用当前元素分别与前面排好顺序的元素比较,当找到满足条件的元素时,整体移动。时间复杂度为O(N^2)。
代码如下:
三,归并排序,归并主要利用到了分而治之,递归的思想。时间复杂度为:O(NlgN)。
对两个排好序的数组组合成一个:
递归调用,深度探索:
测试结果:
一,冒泡:最简单,也是最直接的排序算法,从前往后,每个元素都与其后满足条件的元素交换。时间复杂度O(N^2)。
代码如下:
#include<iostream> using namespace std; void sort(int*a,int n) { int temp; for(int i=0;i<n;++i) for(int j=i+1;j<n;++j) if(a[j]<a[i]) { temp=a[j]; a[j]=a[i]; a[i]=temp; } } int main() { int a[5]={1,5,3,2,6}; sort(a,5); for(int i=0;i<5;++i) cout<<a[i]; return 0; }
二,插入:对于前面已排好的序列,用当前元素分别与前面排好顺序的元素比较,当找到满足条件的元素时,整体移动。时间复杂度为O(N^2)。
代码如下:
template <typename T> class InsertCla { public:
InsertCla(T *Arra,int length_):inputArra(Arra),length(length_){} void getSortedArra(); ~InsertCla(){} private : T* inputArra; int length; }; //非递增排列 template<typename T> inline void InsertCla<T>::getSortedArra() { int i,j; T temp; for(i=1;i<=4;i++){ temp=inputArra[i]; for(j=i-1;j>=0;j--){ if(temp<inputArra[j]){ inputArra[j+1]=inputArra[j]; }else break; } inputArra[j+1]=temp; } }
三,归并排序,归并主要利用到了分而治之,递归的思想。时间复杂度为:O(NlgN)。
对两个排好序的数组组合成一个:
void MergeSort(int* v, int first, int mid, int last) { //空间复杂度增加了 queue<int>* tempV = new queue<int>(); int indexA, indexB; indexA = first; indexB = mid; while (indexA < mid && indexB < last) { if (v[indexA] < v[indexB]) { tempV->push(v[indexA]); indexA++; } else { tempV->push(v[indexB]); indexB++; } } while (indexA < mid) { tempV->push(v[indexA]); indexA++; } while (indexB < last) { tempV->push(v[indexB]); indexB++; } int index = 0; while (tempV->size() > 0) { v[first+index] = tempV->front(); tempV->pop(); index++; } }
递归调用,深度探索:
void Merg(int* a,int first,int last ) { int middle; if(first<last) { middle=(first+last)/2; Merg(a,first,middle); Merg(a,middle+1,last); MergeSort(a,first,middle,last); } } int main() { int a[6]={5,1,2,6,3,7}; Merg(a,0,5); for(int i=0;i<6;++i) cout<<a[i]; return 0; }
测试结果:
相关文章推荐
- 选择排序,冒泡排序,二分搜索,插入排序,归并排序
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 排序(插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排、归并排序、基数排序)
- 插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序
- 数据结构与算法从零开始系列:冒泡排序、选择排序、插入排序、希尔排序、堆排序、快速排序、归并排序、基数排序
- 【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序
- 内排序(插入排序、冒泡排序、选择排序、shell排序、快速排序、归并排序、堆排序)
- Javascript排序算法(冒泡排序,选择排序,插入排序,归并排序,快速排序)
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- 归并排序,插入排序,快速排序,冒泡排序,选择排序的思想
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- Java实现冒泡排序、快速排序、选择排序、插入排序和归并排序
- 排序算法合集(插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,简单选择排序,堆排序,归并排序)
- 数据结构-排序算法详解(插入排序,希尔排序,堆排序,归并排序,快速排序,桶式排序)
- 数据结构_内部排序_插入排序小练习
- 冒泡排序,鸡尾酒排序,插入排序,堆排序,快排序,归并排序
- 2-11. 两个有序链表序列的合并(15):链表数据结构基础练习