/*
快速排序算法 --交换排序
by Wyane_Xu
2012-7-11
不稳定排序
时间复杂度O(nlogn)
空间复杂度O(logn)
思想:
将一个无序序列分成三部分,基准数,小于基准数的序列,大于基准数的序列,使用分治的思想将左右两部分无序序列再次分割直到
序列变成有序的
通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则可分别对这两部分记录继续进行
排序,以达到整个序列有序
快排、希尔和所有的选择类都不稳定
*/
#include "QuickSort.h"
int Partition(int *a,int low,int high)
{
int pivotkey = a[low]; //基准数
while (low < high)
{
while (low < high && pivotkey <a[high])
{
--high;
}
a[low] = a[high];
while (low < high && a[low] < pivotkey)
{
++low;
}
a[high] = a[low];
}
a[low] = pivotkey;
return low;
}
void QuickSort(int *a,int low, int high)
{
if (low < high)
{
int pivotPos = Partition(a,low,high);
QuickSort(a,low,pivotPos-1);
QuickSort(a,pivotPos+1,high);
}
}
冒泡排序:
void BubbleSort(int *a, int len)
{
int i;
int j;
int temp;
for (i=0; i<len; ++i)
{
for (j=0; j<len-1-i; ++j)
{
if (a[j] > a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}