C/C++实现各类排序算法(未完)

快速排序:

void quick_sort(int a[],int low,int high)
{
    int i=low,j=high,tmp=a[low];  //tmp存储基准元素,相当于空出一个用于调动的动态位置
    if(low<high)
    {
        while(i!=j)
        {
            while(j>i&&a[j]>=tmp)
                j--;
            a[i]=a[j];            //此时a[j]空出
            while(j>i&&a[i]<=tmp)
                i++;
            a[j]=a[i];            //a[i]空出
        }
        a[i]=tmp;                 //此时i=j,将基准元素放入此“中间”位置
        quick_sort(a,low,i-1);
        quick_sort(a,i+1,high);
}

冒泡排序:

void bubble_sort(int a[], int n)
{int i, j, temp;
    for (j = 0; j < n - 1; j++)
        for (i = 0; i < n - 1 - j; i++)
         if(a[i] > a[i + 1])
            {temp=a[i]; a[i]=a[i+1]; a[i+1]=temp;}
}

插入排序:

#include<iostream>
using namespace std;
void insertsort(int arr[],int length)
{
    for (auto j = 2; j < length; j++)
    {
        int i = j - 1;
        int key = arr[j];
        while (i >= 0 && arr[i]>key)
        {
            arr[i + 1] = arr[i];
            i--;
        }
        arr[i + 1] = key;
    }
}
int main()
{
    int iarr[] = { 5,2,4,6,1,3 };
    int len = sizeof(iarr) / sizeof(iarr[0]);
    insertsort(iarr, len);
    for (int i = 0; i < len;i++)
    {
        cout << iarr[i]<< endl;
    }
    return 0;
}

归并排序:

#include<iostream>
#define MAX 2147483647
using namespace std;

void Merge(int *a, int low, int mid, int high)
{
    int n = mid - low + 1;
    int m = high - mid ;
    int* l = new int [n+1];
    auto r = new int [m+1];
    for (int i = 0; i < n; i++)
    {
        l[i] = a[low + i];
    }
    for (int i = 0; i < m; i++)
    {
        r[i] = a[mid + i+1];
    }
    l[n] = MAX;
    r[m] = MAX;
    for (int k = low,i=0,j=0; k <= high; k++)
    {
        if (l[i] <= r[j])
        {
            a[k] = l[i];
            i++;
        }
        else
        {
            a[k] = r[j];
            j++;
        }
    } 
    delete [] l;
    delete [] r;
}
void MergeSort(int *a, int low, int high)
{
    if (low < high)
    {
        int mid = (low + high) / 2;
        MergeSort(a, low, mid);
        MergeSort(a, mid+1, high);
        Merge(a, low, mid, high);
    }
}
int main()
{
    int a[] = {3,2,1,6,4,5};
    int len = sizeof(a) / sizeof(a[0]);
    MergeSort(a, 0, len-1);
    for (int i = 0; i < len; ++i)
    {
        cout << a[i] << ' ';
    }
    cout << endl;
    return 0;
}

 

posted @ 2017-06-14 23:29  燕子不呢喃  阅读(210)  评论(0编辑  收藏  举报