数据结构与算法-排序总结

来源:互联网 发布:h3c端口聚合interface 编辑:程序博客网 时间:2024/05/16 08:00

这里讨论常用的内部排序

1.直接插入排序:时间复杂度O(n^2)

void insertSort(int *a, int size){    int i = 0;    for(int i = 1; i < size; i++)    {        if(a[i] < a[i-1])        {            int x = a[i];            int j = i;            while(x < a[j-1] && j >= 1)            {                a[j] = a[j-1];                j--;            }            a[j] = x;        }    }}

2.希尔排序(最小增量排序):时间复杂度

void shellSort(int *a, int size){    int d = 0, i = 0;    for(d = size/2; d > 0; d = d/2)    {        for(i = d; i < size; i++)        {            if(a[i] < a[i-d])            {                int x = a[i];                int j = i;                while(j >= d && x < a[j-d])                {                    a[j] = a[j-d];                    j = j - d;                }                a[j] = x;            }        }    }}
3.冒泡排序,时间复杂度:O(n^2)

void bubbleSort(int *a, int size){    int i = 0,j = 0,temp = 0;    int flag = 0;    for(j = 0; j < size ;j++)    {        flag = 0;        for(i = size - 1; i > j; i--)        {            if(a[i] < a[i-1])            {                flag = 1;                temp = a[i-1];                a[i-1] = a[i];                a[i] = temp;            }        }        if(flag == 0)        {            return;        }    }}
4.快速排序,时间复杂度:O(nlogn)

void QuickSort(int *a, int size){    QSort(a,0,size-1);}void QSort(int *a, int low, int high){    int pivotkey = a[low];    int highRecord = high;    while(low < high)    {        while(low < high && pivotkey < a[high]) high--;        a[low] =  a[high];        while(low < high && pivotkey > a[low]) low++;        a[high] = a[low];    }    a[low] = pivotkey;    if(low-1 <= 0 || low+1 >= highRecord) return;    QSort(a,0,low-1);    QSort(a,low+1,highRecord);}
5.简单选择排序:时间复杂度O(n^2)

void SelectSort(int *a,int size)
{
int i = 0, j =0, temp = 0, pos =0;
for(j = 0; j < size; j++)
{
temp = a[j];
pos = j;
for(i = j+1; i < size; i++)
{
if(a[i] < temp)
{
temp = a[i];
pos = i;
}
}
if(pos != j)
{
temp = a[j];
a[j] = a[pos];
a[pos] = temp;
}
}
}













原创粉丝点击