快速排序的思想在程序中经常用到,虽然C++给出了快速排序的函数调用,但是很多程序可能需要自己写排序过程,快速排序就会被用到,以下是快速排序算法:

快速排序时间复杂度是O(nlog(n)),在数据有序的情况下最耗时

(程序输入如果使用scanf_s则编译器为vs2013)

#include<stdio.h>

#include<stdlib.h>

#define  MAXSIZE  1<<9


typedef struct {

int key;

}RedType;


typedef  struct  {

RedType elemword[MAXSIZE];

int count;

}SqList;


void InitialSqList(SqList &);

void QuickSort(SqList &);

void QSort(SqList &, int, int);

int Partition(SqList &, int, int);

void PrintSqList(SqList);


void InitialSqList(SqList &L)

{

int i;

scanf("%d", &L.count);

for (i = 1; i <= L.count; i++)

scanf("%d", &L.elemword[i].key);

}


void PrintSqList(SqList L)

{

int i;

for (i = 1; i <= L.count; i++)

printf("%d", L.elemword[i].key);

printf("\n");

}


void QSort(SqList &L, int low, int high)

{

int pivotloc;

if (low<high)

{

pivotloc = Partition(L, low, high);

QSort(L, low, pivotloc - 1);

QSort(L, pivotloc + 1, high);

}

}


void QuickSort(SqList &L)

{

QSort(L, 1, L.count);

}


int Partition(SqList &L, int low, int high)

{

int pivotkey;

pivotkey = L.elemword[low].key;

while (low<high)

{

while (low<high&&L.elemword[high].key >= pivotkey)

--high;

L.elemword[low].key = L.elemword[high].key;

while (low<high&&L.elemword[low].key <= pivotkey)

++low;

L.elemword[high].key = L.elemword[low].key;

}

L.elemword[low].key = pivotkey;

return low;

}


int main()

{

SqList L;

int i;

while (scanf("%d",&L.count)!=EOF)

{

L.count = L.count + 1;

for (i = 1; i <= L.count; i++)

scanf("%d", &L.elemword[i].key);

QuickSort(L);

PrintSqList(L);

}

return 0;

}