五种经典排序算法的实现(冒泡、归并、快排、堆排序、希尔)
来源:互联网 发布:ubuntu lamp环境搭建 编辑:程序博客网 时间:2024/04/30 00:13
五种经典排序算法的实现(冒泡、归并、快排、堆排序、希尔)
#include <iostream>using namespace std;void swap(int &d,int& b){ int temp; temp=d; d=b; b=temp;}//冒泡排序void Bubblesort(int arry[],int len){ int i,j; for(i=0;i<len-1;i++) { for(j=len-1;j>i;--j) { if(arry[j]<arry[j-1]) swap(arry[j],arry[j-1]); } }}void Bubble2sort(int *arry,int len){ int i,t; int left=1; int right=len-1; while(left<=right) { //从左到右找最大 for(i=left;i<=right;i++) { if(arry[i]<arry[i-1]) { swap(arry[i],arry[i-1]); t=i; } } right=t-1; //从右到左找最小 for(i=right;i>=left;i--) { if(arry[i]<arry[i-1]) { swap(arry[i],arry[i-1]); t=i; } } left=t+1; }}void Bubble3sort(int *arry,int len){ int i; bool flag; flag=true; while(flag) { flag=false; for(i=1;i<len;i++) { if(arry[i-1]>arry[i]) { swap(arry[i-1],arry[i]); flag=true; } } }}void Bubble4sort(int *arry,int len){ int i,k,flag; flag=len; while(flag>0) { k=flag; flag=0; for(i=1;i<k;i++) { if(arry[i-1]>arry[i]) { swap(arry[i-1],arry[i]); flag=i; } } }}//归并排序void mergesort(int*,int,int,int*);void mergearry(int*,int,int,int,int*);bool Mergesort(int arry[],int len){ int *pTemp=new int[len]; if(pTemp==NULL) return false; mergesort(arry,0,len-1,pTemp); return true;}void mergesort(int arry[],int first,int last,int temp[]){ if(first<last) { int mid=(first+last)/2; mergesort(arry,first,mid,temp); mergesort(arry,mid+1,last,temp); mergearry(arry,first,mid,last,temp); }}void mergearry(int arry[],int first,int mid,int last,int temp[]){ int i=first,j=mid+1; int n=mid,m=last; int k=0; while(i<=n&&j<=m) { if(arry[i]<arry[j]) temp[k++]=arry[i++]; else temp[k++]=arry[j++]; } while(i<=n) temp[k++]=arry[i++]; while(j<=m) temp[k++]=arry[j++]; for(i=0;i<k;i++) { arry[first+i]=temp[i]; }}//快速排序void Quicksort(int arry[],int left,int right){ if(left<right) { int i=left,j=right,x=arry[i]; while(i<j) { while(i<j && arry[j]>=x) j--; if(i<j) arry[i++]=arry[j]; while(i<j && arry[i]<x) i++; if(i<j) arry[j--]=arry[i]; } arry[i]=x; Quicksort(arry,left,i-1); Quicksort(arry,i+1,right); }}//堆排序(大顶堆、小顶堆)//从i节点开始调整,len为节点总数 从0开始计算 i节点的子节点为 2*i+1, 2*i+2//调整为大顶堆void AdjustMaxHeap(int *arry,int i,int len){ int j,temp; temp=arry[i]; j=2*i+1; while(j<len) { if(j+1<len && arry[j+1]>arry[j]) j++; if(arry[j]<=temp) break; arry[i]=arry[j]; i=j; j=2*i+1; } arry[i]=temp;}//调整为小顶堆void AdjustMinHeap(int *arry,int i,int len){ int temp,child; for(temp=arry[i];2*i+1<=len;i=child) { child=2*i+1; if(child<len && arry[child]>arry[child+1]) child++; if(arry[child]<temp) arry[i]=arry[child]; else break; } arry[i]=temp;}void HeapSort(int *arry,int len){ int i; for(i=len/2-1;i>=0;i--) { AdjustMaxHeap(arry,i,len);//arry[]={9 7 8 5 6 0 1 4 2 3}// AdjustMinHeap(arry,i,len-1);//arry[]={0 2 1 4 3 8 5 7 9 6} } for(i=len-1;i>=1;i--) { swap(arry[i],arry[0]); AdjustMaxHeap(arry,0,i);//arry[]={0 1 2 3 4 5 6 7 8 9}// AdjustMinHeap(arry,0,i-1);//arry[]={9 8 7 6 5 4 3 2 1 0} }}//希尔排序void Shellsort(int *arry,int len){ int i,j,h,temp; for(h=len/2;h>0;h=h/2) { for(i=h;i<len;i++) { temp=arry[i]; for(j=i-h;j>=0;j=j-h) { if(temp<arry[j]) { arry[j+h]=arry[j]; } else break; } arry[j+h]=temp; } }}int main(){ int k; int c[]={5,4,8,2,6,0,1,7,9,3}; int len=sizeof(c)/sizeof(c[0]);// Bubble4sort(c,len);// Mergesort(c,len);// Quicksort(c,0,len-1);// HeapSort(c,len); Shellsort(c,len); for(k=0;k<len;k++) cout<<c[k]<<' '; cout<<endl; system("pause"); return 0;}
阅读全文
1 0
- 五种经典排序算法的实现(冒泡、归并、快排、堆排序、希尔)
- 五种经典排序算法的实现(冒泡、归并、快排、堆排序、希尔)
- 常见排序算法总结与实现(冒泡、插入、选择、希尔、堆排序、归并、快排)
- 常见排序算法C++实现(冒泡,直接插入,希尔,堆,归并,简单选择,快排)
- 排序算法:快排,插入,希尔,归并,堆,选择,冒泡
- 八种排序算法(直接插入,希尔,直接选择,堆,冒泡,快排,归并,基数)
- 采用回调函数的内部排序算法-插入排序,希尔排序,冒泡,快排,堆排,归并排,基数排序
- 采用回调函数的内部排序算法-插入排序,希尔排序,冒泡,快排,堆排,归并排,基数排序
- 各种排序算法(冒泡、选择、快排、插入、希尔、堆排、归并、计数、基数)
- 八种常见排序算法:插入、冒泡、选择、希尔、归并、快排、堆排序、基数排序
- 各种排序的实现:希尔 归并 堆排 快排
- C++实现各种基础排序(冒泡、选择、快排、插入、堆排、希尔、归并)
- 排序及选择算法的java实现(一)选择、冒泡、插入、希尔、归并、快排
- 常用排序算法的js实现(冒泡、选择、插入、归并、希尔、快排)
- 排序(快排,冒泡,堆排序,插入排序,归并排序,选择排序)算法Java实现
- Java实现的排序算法及比较 [冒泡,选择,插入,归并,希尔,快排]
- 排序算法 快排 堆排 选择 插入 希尔 归并
- 常用排序算法简介与java实现(冒泡、插入、选择、希尔、归并、快排)
- 微信支付.NET版开发总结(JS API),公众号支付
- 内存对齐和位域
- 最小值和最大值(3n/2)
- python3 定制词云
- 自定义控件-轮播图的实现
- 五种经典排序算法的实现(冒泡、归并、快排、堆排序、希尔)
- HttpClient源码解析系列:第一篇:总览
- 游标
- Python 数据库连接
- 自编STM32轻量级操作系统(二)------任务调度
- js全选和全不选的代码
- iOS在Xcode中重命名项目名称
- 06.19 MySQL数据库含义与安装(初级)
- 5-2 排座位 (25分)