标签:
//将数组和它的长度封装成一个结构体
#define MAXSIZE 10 //由于r[0]用作哨兵,所以只能存放MAXSIZE-1个元素
typedef struct
{
int r[MAXSIZE]; //r[0]用作哨兵或临时变量
int length;
}SqList;
void swap(SqList *L, int i, int j)
{
int tmp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = tmp;
}
冒泡排序:是一种交换排序,两两比较相邻记录的关键字
//思路:从后面一个一个比较相邻两个记录,把最小的一步一步移到前面
void BubbleSort(SqList* L)
{
int i, j;
for(i=1; i<L->length; i++)
{
for(j=L->length-1; j>=i; j--) //注意从后面往前排,达到比较相邻两个记录的目的
{
if(L->r[j] > L->r[j+1])
{
swap(L, j, j+1);
}
}
}
}
//采用分治法(Divide and Conquer)
int Partition(SqList *L, int low, int high)
{
int pivotKey = L->r[low];
while(low < high)
{
while(low<high && pivotKey <= L->r[high])
high--;
swap(L, low, high);
while(low<high && pivotKey >= L->r[low])
low++;
swap(L, low, high);
}
return low;
}
void QSort(SqList *L, int low, int high)
{
int pivot;
if(low < high)
{
pivot = Partition(L, low, high);
QSort(L, low, pivot-1);
QSort(L, pivot+1, high);
}
}
void QuickSort(SqList *L)
{
QSort(L, 1, L->length);
}
标签:
原文地址:http://www.cnblogs.com/shih/p/4623310.html