#include <stdio.h> #include <stdlib.h> void swapint *pi, int *pj)//交换数据 { int temp = *pi; *pi = *pj; *pj = temp; } void showint *p,int n)//显示数组状态 { printf" 此时状态"); for int i = 0; i < n; i++) { printf"%4d", p[i]); } } void quickint *arr, int iLeft, int iRight) { int i = iLeft;//从左边开始循环 int j = iRight + 1;//从右边开始循环 if i < j)//如果左边小于右边 { do { do { i++; } while arr[i] <= arr[iLeft] && i < iRight); //从左向右找第一个大于arr[iLeft]的数 do { j--; } while arr[j] >= arr[iLeft] && j>iLeft); //从右向左找第一个小于arr[iLeft]的数 //如果大数的位置小于小数的位置则进行交换 if i < j) { swap&arr[i], &arr[j]); } //这一步的目的是把大的数都放在右边 } while i < j);//一直循环到i>=j 说明已经已经折中分好了 此时j保存的是小于arr[iLeft]的数所以要和arr[iLeft]交换 swap&arr[iLeft], &arr[j]); //j是分界点,快速排序 左边的 以及右边的 quickarr, iLeft, j - 1); quickarr, j + 1, iRight); } } void main) { int num[10] = { 10, 9, 20, 19, 1, 8, 9, 22, 0, 91 }; quicknum, 0, 9); shownum, 10); system"pause"); }