您的位置:首页 > 理论基础 > 数据结构算法

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

2017-08-28 17:02 549 查看
这里讨论常用的内部排序

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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: