排序
2016-01-04 11:31
239 查看
数据结构编程练习(八)
1 插入排序。
2 希尔排序。
3 冒泡排序。
4 快速排序。
5 直接选择排序。
6 堆排序。
代码实现:
1 插入排序。
2 希尔排序。
3 冒泡排序。
4 快速排序。
5 直接选择排序。
6 堆排序。
代码实现:
#include "iostream" using namespace std; //插入排序 void insert_sort(int A[],int n) { for(int i=2;i<n;i++) { A[0]=A[i]; int j=i-1; while(A[j]>A[0]) { A[j+1]=A[j]; j--; } A[j+1]=A[0]; } } //希尔排序 void shell_sort(int A[],int n) { int dh=n/2,j; while(dh>=1) { for(int i=dh+1;i<n;i++) { A[0]=A[i]; j=i-dh; while(A[j]>A[0]) { A[j+dh]=A[j]; j=j-dh; } A[j+dh]=A[0]; } dh=dh/2; } } //冒泡排序1 void bubble_sort(int A[],int n) { for(int i=1;i<n;i++) for(int j=n-1;j>=i;j--) { if(A[j]<A[i]) { A[0]=A[j]; A[j]=A[i]; A[i]=A[0]; } } } //冒泡排序2 void dbubble_sort(int A[],int n) { int i=1; bool exchanged; do { exchanged=false; for(int j=n-1;j>=i;j--) if(A[j]<A[j-1]) { A[0]=A[j]; A[j]=A[j-1]; A[j-1]=A[0]; exchanged=true; } i++; }while(i<n-1&&exchanged==true); } // 快速排序划分算法 void partition(int A[],int s,int t,int &cutpoint) { A[0]=A[s]; int i=s,j=t; while(i!=j) { while(i<j&&A[j]>A[0]) j--; if(i<j) { A[i]=A[j]; i++; } while(i<j&&A[i]<A[0]) i++; if(i<j) { A[j]=A[i]; j--; } } A[i]=A[0]; cutpoint=i; } //快速排序 void quick_sort(int A[],int n,int s,int t) { int i; if(s<t) { partition(A,s,t,i); quick_sort(A,n,s,i-1); quick_sort(A,n,i+1,t); } } //直接选择排序 void select_sort(int A[],int n) { for(int i=1;i<n-1;i++) { int min=i; for(int j=i+1;j<n;j++) if(A[j]<A[min]) min=j; if(min!=i) { A[0]=A[min]; A[min]=A[i]; A[i]=A[0]; } } } //堆的建立 void sift(int A[],int k,int n) { A[0]=A[k]; bool finished=false; int i=k,j=2*i; while(j<n&&finished) { if(j<n-1&&A[j]<A[j+1]) j++; if(A[0]>=A[j]) finished=true; else { A[i]=A[j]; i=j; j=2*j; } } A[i]=A[0]; } //堆排序(有问题,解决后订正) void heap_sort(int A[],int n) { for(int i=n/2;i>=1;i--) sift(A,i,n); for(int j=n-1;j>=2;j--) { A[0]=A[1]; A[1]=A[j]; A[j]=A[0]; sift(A,1,j-1); } } //输出数组 void output(int A[],int n) { for(int i=1;i<n;i++) cout<<A[i]<<" "; cout<<endl; } int main() { int A[100],n=1,x; while(cin>>x&&x>=0) { A =x; n++; } insert_sort(A,n); output(A,n); shell_sort(A,n); output(A,n); bubble_sort(A,n); output(A,n); dbubble_sort(A,n); output(A,n); int s=1; quick_sort(A,n,s,n-1); output(A,n); select_sort(A,n); output(A,n); heap_sort(A,n); output(A,n); return 0; }
相关文章推荐
- Git 远程协作
- Genymotion常见问题整合与解决方案
- 基于xmpp的android即时通讯
- 一个java面试官的感慨来源于网络
- 总结之前遇到的并解决了的问题(一)-----关于继承了公共类,button不可用的问题
- sql server中的varchar和Nvarchar有什么区别?
- BigDecimal用法详解
- 多选dialog的简单实现
- Android内存泄露自动检测神器LeakCanary
- t-SNE visualization of CNN codes
- 神经网络编程入门
- RobotFramework-调用.py文件
- 虚树小结
- 同步复位和异步复位的对比
- Leetcode211: Populating Next Right Pointers in Each Node II
- 又见嵌入式
- 工业镜头五大参数
- 在分布式项目中使用memcached+cookie替代session
- [leetcode]Same Tree
- 写一个Redis封装类