最差时间复杂度 (n²)
最优时间复杂度 (nlogn)
平均时间复杂度 (nlogn)
平均空间复杂度(logn)
动态图:
#include <stdio.h>
/* 切分数组 */
int partition(int a[], int first, int last)
{
int i = first;
int j = last;
int key = a[first]; /* 用第一个值作为关键值 */
printf("the key is %d; ", key);
while (i < j) {
/* 从右往左比较 */
while (i < j && a[j] >= key) {
--j; /* 向前找 */
}
a[i] = a[j]; /* 将比关键值小的移到低端 */
/* 从左往右比较 */
while (i < j && a[i] <= key) {
++i; /* 向后找 */
}
a[j] = a[i]; /* 将比关键值大的移到高端 */
}
/* 此时i == j,更改为关键值 */
a[i] = key;
/* 打印合并后的数据 */
int k;
for (k = first; k <= last; ++k)
printf("%d ", a[k]);
printf("\n");
return i; /* 返回关键值位置 */
}
/* 递归方式 */
void sort(int a[], int first, int last)
{
if (a != NULL && first < last) {
int key = partition(a, first, last);
sort(a, first, key-1);
sort(a, key+1, last);
}
}
int main()
{
int arr[] = {49, 38, 65, 97, 76, 13, 27};
int size = sizeof(arr) / sizeof(int);
//sort
sort(arr, 0, size - 1);
int i = 0;
printf("end sort: ");
for (i; i < size; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。