排序算法

来源:互联网 发布:linux 拷贝整个文件夹 编辑:程序博客网 时间:2024/06/05 02:10

主程序:

#include <iostream>using namespace std;#include <ctime>void sort(int* a, int n);int main(){const int N=10240;int a[N];for(int i=0; i<N; i++)a[i] = N-i;for(int i=0; i<10; i++)cout << a[i] << ' ';cout << endl;clock_t t1 = clock();sort(a,N);clock_t t2 = clock();cout << double(t2-t1)/CLOCKS_PER_SEC << endl;for(int i=0; i<10; i++)cout << a[i] << ' ';cout << endl;}

冒泡排序:

#include <algorithm>using std::swap;void sort(int* a, int n){bool changed;do{changed = false;for(int i=1; i<n; i++){if(a[i]<a[i-1]){swap(a[i],a[i-1]);changed = true;}}--n;}while(changed);}
插入排序:

void sort(int* a, int n){int j;for(int i=1; i<n; i++){int t = a[i];for(j=i;j>0&&t<a[j-1];j--)a[j]=a[j-1];a[j] = t;}}
选择排序:

#include <algorithm>using std::swap;void sort(int* a, int n){//反复n-1次for(int i=0; i<n-1; i++){//第i次从第i~n个数据中找到最小元素是谁int min = i;for(int j=i+1; j<n; j++)if(a[j]<a[min])min = j;//把它跟第i个元素交换swap(a[min],a[i]);}}/*优化void sort(int* a, int n){//反复n-1次for(int i=1; i<n; i++){//第i次从第i~n个数据中找到最小元素是谁int min = i-1;for(int j=i; j<n; j++)if(a[j]<a[min])min = j;//把它跟第i个元素交换swap(a[min],a[i-1]);}}*/

快速排序:

#include <algorithm>using std::swap;void sort(int* a, int n){if(n<=1) return;if(n==2){if(a[1]<a[0]) swap(a[1],a[0]);return;}swap(a[n/2],a[0]);//返回的时候a[0]所指向的地址已经改变int jie=a[0];int* L=a+1;int* R=a+n-1;while(L<R){while(L<R&&*L<jie) ++L;while(a<R&&!(*R<jie)) --R;if(L<R) swap(*L,*R);}if(*R<jie) swap(*R,a[0]);sort(a, R-a);sort(R+1,n-1-(R-a));}




0 0