赞
踩
这个是升序排列,如果想降序排列,将下面两行的符号反过来即可;
arr[right] <= arr[key]
arr[left] >= arr[key]
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> void swap(int *v1, int *v2) { int temp = *v1; *v1 = *v2; *v2 = temp; } void my_qsort(int *arr, int start, int end) { int key = start; int left = start; int right = end; if (left > right) { return; } while (left < right) { /*从右往左遍历,找到小于arr[key]的值*/ while ((left < right) && (arr[right] >= arr[key])) { right--; } /*从左往右遍历,找到大于arr[key]的值*/ while ((left < right) && (arr[left] <= arr[key])) { left++; } /*交换值*/ swap(&arr[left], &arr[right]); } swap(&arr[key], &arr[right]); key = right; my_qsort(arr, start, key - 1); my_qsort(arr, key + 1, end); return; } int main() { int i = 0; int arr[] = { 10, 6, 9, 1, 8, 7, 5, 4, 2, 3 }; int num = sizeof(arr) / sizeof(int); my_qsort(arr, 0, num - 1); printf("排序后:"); for (i = 0; i < num; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。