本章讲解的是快速排序算法,快速排序有很多变种,不过基本原理是一样的。
int Partition(int *a, int low, int high)
{
int key = a[low];
while (low < high) {
while (low < high && a[high] >= key) {
high--;
}
a[low] = a[high];
while (low < high && a[low] <= key) {
low++;
}
a[high] = a[low];
}
a[low] = key;
return low;
}
void QuickSort(int *a, int low, int high)
{
if (low < high) {
int mid = Partition(a, low, high);
QuickSort(a, low, mid-1);
QuickSort(a, mid+1, high);
}
}
int main(int argc, const char * argv[])
{
int a[] = {3, 5, 1, 2, 5, 4};
int n = sizeof(a) / sizeof(*a);
int low = 0;
int high = n - 1;
QuickSort(a, low, high);
int i = 0;
for (; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}输出:1 2 3 4 5 5
本文出自 “移动开发” 博客,请务必保留此出处http://ikinglai.blog.51cto.com/6220785/1384018
原文:http://ikinglai.blog.51cto.com/6220785/1384018