//
// main.c
// QuickSort
//
// Created by lan on 16/3/19.
// Copyright © 2016年 lan. All rights reserved.
//
#include <stdio.h>
void QuickSort(int *, int, int);
int FindPos(int *, int, int);
int main(int argc, const char * argv[]) {
int a[7] = {2, 5, 62, 1, 0, 3, 8};
QuickSort(a, 0, 6); // 对数组 0 到 6 位置排序
for (int i = 0; i < 7; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
// 快速排序的一种方式(升序)
void QuickSort(int * a, int low, int high) {
int pos;
if (low < high) {
pos = FindPos(a, low, high); // 找到第一个元素排序后所在数组中位置
QuickSort(a, low, pos - 1); // 相同方法排序左边
QuickSort(a, pos + 1, high); // 排序右边
}
}
int FindPos(int * a, int low, int high) {
int val = a[low]; // 先把第一个元素存起来
while (low < high) {
while (low < high && a[high] >= val) {
high--;
}
a[low] = a[high];
while (low < high && a[low] <= val) {
low++;
}
a[high] = a[low];
} // 循环结束,low 和 high 相等
a[low] = val; // 找到第一个元素所在位置
return low; // 或者 high
}
输出结果:
0 1 2 3 5 8 62
Program ended with exit code: 0