经典排序算法

来源:互联网 发布:华硕超频软件 编辑:程序博客网 时间:2024/05/01 00:04
#include<iostream>#include<cmath>using namespace std;/*排序1*/void bubblesort(int data[], int len)//O(n^2){    for (int i = 0; i < len; ++i)    {        for (int j = i + 1; j < len; ++j)        {            if (data[i]>data[j])            {                int temp = data[i];                data[i] = data[j];                data[j] = temp;            }        }    }}void choosesort(int data[], int len)//O(n^2){    int temp,min;    for (int i = 0; i < len; ++i)    {        min = i;        for (int j = i+1; j < len; ++j)        {            if (data[j] < data[min])                min = j;        }        temp = data[i];        data[i] = data[min];        data[min] = temp;    }}void insertsort(int data[], int len)//O(n^2){    int temp, j;    for (int i = 1; i < len; ++i)    {        int temp = data[i];        for (j = i - 1; j >= 0 && data[j] > temp; --j)            data[j + 1] = data[j];        data[j + 1] = temp;    }}void merge(int *l1, int *l2, int l1size, int l2size){    int temp[100];    int i=0, j=0,k=0;    while (i < l1size&&j < l2size)    {        if (l1[i] < l2[j])            temp[k++] = l1[i++];        if (l2[j] <= l1[i])            temp[k++] = l2[j++];    }    while (i < l1size)        temp[k++] = l1[i++];    while (j < l2size)        temp[k++] = l2[j++];    for (int m = 0; m < k; ++m)    {        l1[m] = temp[m];    }}void mergesort(int data[], int len)//O(nlogn){    if (len > 1)    {        int *l1 = data;        int l1size = len / 2;        int *l2 = data + len / 2;        int l2size = len - l1size;        mergesort(l1, l1size);        mergesort(l2, l2size);        merge(l1, l2, l1size, l2size);    }}void quicksort(int s[], int l, int r)//O(nlogn){    if (l < r)    {        int i = l, j = r, t = s[l];        while (i < j)        {            while (i<j&&s[j]>t)                --j;            if (i < j)                s[i++] = s[j];            while (i < j&&s[i] < t)                ++i;            if (i < j)                s[j--] = s[i];        }        s[i] = t;        quicksort(s,l, i - 1);        quicksort(s, i + 1, r);    }}void shellsort(int data[], int len, int step)//时间复杂度依靠步长{    if (step > 1)    {        for (int i = step; i < len; ++i)        {            int index = i;            while (index-step>=0&&data[index-step]>data[index])            {                int temp = data[index];                data[index] = data[index - step];                data[index - step] = temp;                index -= step;            }        }        shellsort(data, len, step - 1);    }}int main(){    int a[10] = { 23, 45, 76, 8, 2, 31, 5, 77, 8, 3 };    //bubblesort(a, 10);    //choosesort(a, 10);    //insertsort(a, 10);    //mergesort(a, 10);    //quicksort(a, 0, 9);    shellsort(a, 10,5);    for (int i = 0; i < 10; ++i)        cout << a[i] << endl;    system("pause");    return 0;}
0 0
原创粉丝点击