温馨提示:想看java版的源代码【请点击这里】
介绍:
代码:
# include <stdio.h>
//快速排序的函数
//第一个参数为要排序的数组,第二个参数是参与排序的起始位置,第三个参数是参数排序的截止位置
void quickSort(int * arr , int low, int height);
//找到数组下标为第二个参数的值 在 升序中应该在的 位置(下标)
int findPost(int * arr, int low, int height);
int main(void) {
int arr[7] = {7, 6, 3, -5, 12, 9, -6};
quickSort(arr , 0, 6);
int i;
for(i=0; i<7; i++) {
printf("%d\t", arr[i]);
}
printf("\n");
return 0;
}
void quickSort(int * arr , int low, int height) {
int post;
if(low < height) { //合法的条件
//post是归位的数的归位后的索引
post = findPost(arr , low, height);
//post-1 是指post前面的一个索引
quickSort(arr , low, post-1);
//post-1 是指post后面的一个索引
quickSort(arr , post+1, height);
}
}
int findPost(int * arr, int low, int height) {
int val = arr[low];
while(low < height) {
//直到 arr[height] < val 或者 low >= height while结束
while(low < height && arr[height] >= val) {
--height; //height左移
}
arr[low] = arr[height];
while(low < height && arr[low] <= val) {
++low;
}
arr[height] = arr[low];
}
arr[low] = val;
return low;
}
结果: