排序

来源:互联网 发布:淘宝怎么寄售游戏币 编辑:程序博客网 时间:2024/06/16 19:13
#include<iostream>using namespace std;void shellsort(int a[], int n){    int j, gap;    for (gap = n / 2; gap > 0; gap /= 2)  //每次步数/2直到除为1        for (j = gap; j < n; j++)        //这里j的初始值是挨个取,用下边的插入排序可以直接跟本组前面的比较            if (a[j] < a[j - gap])            {                int temp = a[j];                int k = j - gap;                while (k >= 0 && a[k] > temp)  //找到合适的位置                {                    a[k + gap] = a[k];                    k -= gap;                }                a[k + gap] = temp;            //插入            }}void quicksort(int s[], int l, int r){    if (l < r)    {  int i = l, j = r, x = s[l];        while (i < j)        {            while(i < j && s[j] >= x) // 从右向左找第一个小于x的数                j--;            if(i < j)              //如果合适                {s[i++] = s[j];}      //将那个数换到i指针上,然后再            while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数                i++;            if(i < j)                s[j--] = s[i];        }        s[i] = x;        quicksort(s, l, i - 1);        quicksort(s, i + 1, r);    }}void Bubblesort(int a[],int n){    for(int i=0;i<n;i++)        for(int j=1;j<n-i;j++)    {        if(a[j]<a[j-1])        {            int tmp=a[j];            a[j]=a[j-1];            a[j-1]=tmp;        }    }}int main(){   int a[100],b[100],c[100];//用于shell,快速,冒泡排序的数组    int n;    cout<<"数组大小和值";    cin>>n;    for(int i=0;i<n;i++)        {cin>>a[i];b[i]=a[i];c[i]=a[i];}    shellsort(a,n);    cout<<"希尔排序";    for(int i=0;i<n;i++)        cout<<a[i]<<" ";     cout<<endl;        quicksort(b,0,n-1);        cout<<"快速排序";    for(int i=0;i<n;i++)        cout<<b[i]<<" ";    cout<<endl;    Bubblesort(c,n);    cout<<"冒泡排序";    for(int i=0;i<n;i++)        cout<<c[i]<<" ";    cout<<endl;    return 0;}
0 0
原创粉丝点击