各种排序
来源:互联网 发布:sql stuff用法 编辑:程序博客网 时间:2024/05/16 00:59
#include<iostream>using namespace std;//直接插入排序void Insert(int *arr, int len){ for(int i=0;i<len-1;++i) { if(arr[i+1]<arr[i]) { int k=i; int tep = arr[i+1]; while(arr[k]>tep && k>=0) { arr[k+1] = arr[k]; k--; } arr[k+1] =tep; } }}void show(int *arr, int len){ for(int i=0;i<len;++i) { cout<<arr[i]<<' '; } cout<<endl;}//希尔排序void Shell(int *arr , int len, int d){ for(int i=d;i<len;i++) { if(arr[i]<arr[i-d]) { int tep= arr[i]; arr[i] = arr[i-d]; arr[i-d] = tep; } }}//冒泡排序void Pop(int *arr , int len){ if(arr==NULL) { return ; } for(int j=1;j<len;j++) { int flg=0; for(int i=0;i<len-1;++i) { if(arr[i]>arr[i+1]) { int tep = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tep; flg=1; } } if(flg==0) { break; } }}//双向冒泡排序void Doupop(int *arr , int len){ if(arr == NULL) { return; } int swap=1; for(int i=1; swap!=0; ++i) { swap=0; for(int j=i;j<len;++j) { if(arr[j-1]>arr[j]) { int tep = arr[j]; arr[j] = arr[j-1]; arr[j-1] = tep; swap=1; } } for(int j=len-i; j>=0; j--) { if(arr[j]<arr[j-1]) { int tep = arr[j]; arr[j] = arr[j-1]; arr[j-1] = tep; } } }}//快速排序int Partion(int *arr , int beg, int end){ int tep = arr[beg]; while(beg<end) { while(beg<end && arr[end]>=tep) { end--; } if(beg<end) { arr[beg] = arr[end]; beg++; } while(beg<end&& arr[beg]<=tep) { beg++; } if(beg<end) { arr[end] = arr[beg]; end--; } } arr[beg] = tep; return beg;}void QuitSort(int *arr , int beg, int end){ if(arr==NULL) { return ; } int i; if(beg<end) { i = Partion(arr , beg, end); QuitSort(arr , beg , i-1); QuitSort(arr , i+1,end); }}//直接选择排序void SelectSort(int *arr , int n){ int min; int k; for(int i=0;i<n-1;++i) { min = arr[i]; for(int j=i+1;j<n;++j) { if(arr[j]<min) { min = arr[j]; k=j; } } if(k!=i) { int tep = arr[i]; arr[i] = arr[k]; arr[k] = tep; } }}//堆排序学习的是海子老师的算法;void HeapAdjust(int *a,int i,int size) //调整堆 { int lchild=2*i; //i的左孩子节点序号 int rchild=2*i+1; //i的右孩子节点序号 int max=i; //临时变量 if(i<=size/2) //如果i是叶节点就不用进行调整 { if(lchild<=size&&a[lchild]>a[max]) { max=lchild; } if(rchild<=size && a[rchild]>a[max]) { max=rchild; } if(max!=i ) { swap(a[i],a[max]); if(max<size/2) { HeapAdjust(a,max,size); //避免调整之后以max为父节点的子树不是堆 } } }}void BuildHeap(int *a,int size) //建立堆 { int i; for(i=size/2;i>0;i--) //非叶节点最大序号值为size/2 { HeapAdjust(a,i,size); } } void HeapSort(int *a,int size) //堆排序 { int i; BuildHeap(a,size); for(i=size;i>=1;i--) { //cout<<a[1]<<" "; swap(a[1],a[i]); //交换堆顶和最后一个元素,即每次将剩余元素中的最大者放到最后面 //BuildHeap(a,i-1); //将余下元素重新建立为大顶堆 HeapAdjust(a,1,i-1); //重新调整堆顶节点成为大顶堆 }} int main(){ int arr[] = {-1,9,8,7,6,5,4,3,2,1,0}; int len = sizeof(arr)/sizeof(arr[0]); /*cout<<len<<endl; Insert(arr , len); show(arr,len); cout<<endl; for(int i=4;i>=0;i--) { Shell(arr, len , i); } show(arr, len); Pop(arr , len); Doupop(arr , len); QuitSort(arr , 0, len-1); SelectSort(arr , len);*/ HeapSort(arr , len-1); show(arr, len); return 0;}
1 0
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 各种排序
- 排序 各种
- 各种排序
- ISO 8583 Tutorial – Introduction for Beginners
- 关于jsp页面上无法使用EL表达式的问题
- 构造函数中调用虚函数能否实现多态
- HDU 1506 Largest Rectangle in a Histogram 分治法 -
- Tree107BinaryTreeLevelOrderTraversal2
- 各种排序
- [BZOJ4530][Bjoi2014]大融合(树链剖分+并查集)
- Dll嵌入到exe中
- is和as操作符
- 隐式和显式接口的区别
- JavaScript形参和实参
- 异常处理
- 托管堆和垃圾回收
- IT求职感悟