# QuickSort

QuickSort是一种原地排序算法，不稳定。最坏情况是O(n2)，平均和最好情况是O(nlogn)

QUICKSORT(A, p, r)

1    if p < r

2        then q <- PARTITION(A, p, r)

3            QUICKSORT(A, p, q-1)

4            QUICKSORT(A, q+1, r)

QUICKSORT(A, 1, length[A])

PARTITION(A, p, r)

1    x = A[r]

2    i <- p-1

3    for j <- p upto r-1

4        if (A[j] <= x)

5            then     i< i+1

6                exchange A[i] <-> A[j]

7    exchange A[i+1] <-> A[r]

8    return i+1

/*
* #include <stdio.h>
*
* void swp(int *a, int *b)
* {
*     if (a != b) {
* 		*a = *a^*b;
*         *b = *a^*b;
*         *a = *a^*b;
* 	}
* }
*
* int povit(int a[], int p, int r)
* {
* 	int x = a[r];
*     int i = p-1;
*     int j;
*
*     for (j = p; j < r; j++) {
* 		if (a[j] >= x) {
*             i++;
*             swp(&a[j], &a[i]);
* 		}
* 	}
*     swp(&a[i+1], &a[r]);
*
*     printf("i = %d, r = %d\n", i, r);
*
*     if (i == r-1) {
*         i = (p+r)/2;
*         printf("%d\n", i);
*         return i;
* 	}
*
*     return i+1;
* }
*
* void quicksort(int a[], int p, int r)
* {
* 	if (p < r) {
*         int q;
* 		q = povit(a, p, r);
*         quicksort(a, p, q-1);
*         quicksort(a, q+1, r);
* 	}
* }
*
* int main(void)
* {
*     int i = 0;
*     /\*
*      * int a[9] = {
* 	 * 	0, 2, 8, 7, 1, 3, 5, 6, 4
* 	 * };
* 	 *\/
*     int a[13] = {
* 		0, 13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 21
* 	};
*
*     /\*
*      * int a[13] = {
* 	 * 	0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
* 	 * };
*      *\/
*
*     quicksort(a, 1, 12);
*
*     for (i = 1; i < 13; i++) {
* 		printf("%d ", a[i]);
* 	}
* //    printf("\n");
*
* 	return 0;
* }
*/
#include <stdio.h>

void swp(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}

int partition(int a[], int p, int q)
{
int i = p, j;
int x = a[p];

for (j = p+1; j <= q; j++) {
if (a[j] <= x) {
i++;
swp(&a[i], &a[j]);
}
}
swp(&a[i], &a[p]);

return i;
}

void quicksort(int a[], int p, int q)
{
int r = partition(a, p, q);

quicksort(a, p, r-1);
quicksort(a, r+1, q);
}

int main(void)
{
int i;
int a[] = {0, 1, 8, 9, 3, 5, 2, 6, 4, 7 ,0};

quicksort(a, 1, 10);

for (i = 1; i <= 10; i++) {
printf("%d ", a[i]);
}

return 0;
}

#include <stdio.h>

void swp(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}

void qsort(int a[], int p, int r)
{
if (p < r) {
int x = a[p];
int i = p;
int j = r +1;

while (1) {
do {
i++;
} while (i <= r && a[i] < x);

do {
j--;
} while (a[j] > x);

if (i >= j)
break;

swp(&a[i], &a[j]);
}
swp(&a[p], &a[j]);

qsort(a, p, j-1);
qsort(a, j+1, r);
}
}

int main(void)
{
int i;
int a[13] = {
0, 13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 21
};

qsort(a, 1, 12);

for (i = 1; i < 13; i++) {
printf("%d ", a[i]);
}

return 0;
}


• 本文已收录于以下专栏：

举报原因： 您举报文章：QuickSort 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)