数据结构与算法-排序总结
2017-08-28 17:02
549 查看
这里讨论常用的内部排序
1.直接插入排序:时间复杂度O(n^2)
2.希尔排序(最小增量排序):时间复杂度
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;
}
}
}
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;
}
}
}
相关文章推荐
- 数据结构与算法之七大排序总结
- 数据结构与算法总结——排序(三)桶排序,计数排序和基数排序
- 数据结构及简单算法的总结----之【排序】
- 【数据结构与算法】【排序】总结
- 数据结构与算法总结——排序(一)简单排序
- 数据结构与算法——冒泡排序、选择排序和快速排序
- 【数据结构与算法】内部排序之四:归并排序和快速排序(含完整源码)
- 数据结构—排序总结
- 数据结构——算法之(005)(输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字)
- Java数据结构与算法之选择排序_动力节点Java学院整理
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 算法与数据结构基础(一)排序基础1.选择排序
- 数据结构与算法-选择排序
- 【数据结构与算法】-常见排序算法总结
- 数据结构与算法--拓补排序及无环加权有向图的最短路径
- javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
- 【数据结构与算法】快速排序
- 数据结构与算法之选择排序
- 程序员面试宝典之数据结构基础----排序之快速排序(简单快速排序与改进快速排序)总结
- 数据结构中排序和查找的算法