排序
来源:互联网 发布:怎么去掉windows水印 编辑:程序博客网 时间:2024/06/14 06:30
排序
之
冒泡排序算法
void maopaosort(int a[],int n){for (int i = 0; i < n; i++)for (int j =1; j < n; j++){if (a[j] < a[j - 1]){int t;t = a[j - 1];a[j - 1] = a[j];a[j] = t;}}}
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
----来自百度百科
假如是从大到小那么
原始排序 5 4 7 2 7 5
第一次排序 5 7 4 7 5 2
第二次排序 7 5 7 5 4 2
第三次排序 7 7 5 5 4 2
排序原理
冒泡排序算法的运作如下:(从后往前)
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
#include<iostream>#include<string>#include<ctime>#include<math.h>#include<stdlib.h>#include<algorithm>using namespace std;/*冒泡排序*/void maopaosort(int a[],int n){for (int i = 0; i < n; i++)for (int j =1; j < n; j++){if (a[j] < a[j - 1]){int t;t = a[j - 1];a[j - 1] = a[j];a[j] = t;}}}/*选择排序*/void selectsort(int a[],int n){for (int i = 0; i < n; i++)for (int j = i + 1; j <n; j++)if (a[j]>a[i]){int t;t = a[i];a[i] = a[j];a[j] = t;}}/*鸡尾酒排序*/void jiweijiusort(int a[],int n){int left = 0;int right = n - 1;while (left < right){for (int i = left; i < right; i++)if (a[i+1] > a[i])//从大到小{int t;t = a[i];a[i] = a[i+1];a[i+1] = t;}right--;for (int i = right; i > left; i--)if (a[i]>a[i-1]){int t;t = a[i - 1];a[i - 1] = a[i];a[i] = t;}left++;}}/*插入排序*/void Insertsort(int a[],int n){int i, j,get;for (i = 1; i < n; i++){get = a[i];j = i - 1;while (j >= 0 && get < a[j]){a[j + 1] = a[j];j--;}a[j + 1] = get;}}/*折半插入排序*/void zheban(int a[],int n){ int tmp; for(int i=1;i<n;i++) { tmp=a[i]; int low=0; int high=i-1; while(low<=high) { int mid=(low+high)/2; if(tmp<a[mid]) high=mid-1; else low=mid+1; } for(int j=i-1;j>=high+1;j--) a[j+1]=a[j]; a[high+1]=tmp; }}/*快速排序*/void Qsort(int a[], int low, int high){ if(low >= high) { return; } int first = low; int last = high; int key = a[first]; while(first < last) { while(first < last && a[last] >= key) { --last; } a[first] = a[last]; while(first < last && a[first] <= key) { ++first; } a[last] = a[first]; } a[first] = key; Qsort(a, low, first-1); Qsort(a, first+1, high);}/*希尔排序*/void xier(int a[],int n){ int gap; for(gap=n/2;gap>0;gap/=2) for(int i=gap;i<n;i++) for(int j=i-gap;j>=0&&a[j]>a[j+gap];j=j-gap) swap(a[j], a[j + gap]);}/*归并排序*/void Merge(int a[],int low,int mid,int high){ int N=high-low+1; int b[N]; int i=low; int j=mid+1; int k=low; while(i<mid+1&&j<high+1) { if(a[i]<a[j]) { b[k]=a[i]; i++; k++; } else { b[k]=a[j]; j++; k++; } } while(i<mid+1) { b[k]=a[i]; i++; k++; } while(j<high+1) { b[k]=a[j]; k++; j++; } for(i=low;i<=high;i++) { a[i]=b[i]; }}void mergesort(int a[],int L,int R){ if(L<R) { int M=(L+R)/2; mergesort(a,L,M); mergesort(a,M+1,R); Merge(a,L,M,R); }}/*堆排序*/void Heapsift(int a[],int size,int element){ int leftchild=2*element+1; int rightchild=leftchild+1; while(rightchild<size) { if(a[element]<a[rightchild]&&a[element]<a[leftchild]) { return ; } else { if(a[rightchild]>=a[leftchild]) { swap(a[leftchild],a[element]); element=leftchild; } else { swap(a[rightchild],a[element]); element=rightchild; } } leftchild=2*element+1; rightchild=leftchild+1; } if(leftchild<size&&a[leftchild]<a[element]) { swap(a[leftchild],a[element]); } return ;}void Heapsort(int a[],int size){ int i; for(i=size-1;i>=0;i--) { Heapsift(a,size,i); } while(size>0)//拆除树 { swap(a[size-1],a[0]); size--; Heapsift(a,size,0); } return ;}int main(){ int a[100000];srand(time(0));for (int i = 0; i < 100000; i++){int x = rand();if (abs(x) < 300000000)a[i] = x;}//zheban(a,100000);//Heapsort(a,100000);//for(int i=0;i<10000;i++) // cout<<a[i]<<endl; return 0;}
0 0
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- Mac快捷键总结
- [RK3288][Android6.0] 调试笔记 --- I2C通信失败问题
- linux安装nginx
- 调试利器之wireshark
- 【搜索】洛谷 P1457 城堡 The Castle
- 排序
- 解决:Servlet通过getInitParameter取值为null问题
- Linux rpm命令的使用
- ruby on rails 使用bullet gem调试 n + 1 问题, 优化数据库查询
- 面试5
- HTML制作3D粒子效果Demo
- 【TensorFlow】tf.nn.conv2d是怎样实现卷积的?
- 小程序开发系列(六)获取群信息
- 操作系统之进程调度