#include <stdio.h> #include "stdafx.h" #define N 7 void Print2(int *a) { for (int i = 0; i < N; i++) { printf("%d ", a[i]); } printf("\n"); } void Sort(int *data, int left, int right) { if (left >= right) { return; } int i = left; int j = right; int key = data[i]; while (i < j) //左边和右边的检测没有碰面 { while (i<j && data[j] > key) //需要从右边向左 直到发现一个比key小的萝卜 { j--; } data[i] = data[j]; //取出来填旧坑,形成新坑 while (i < j && data[i] < key) //从左边取一个萝卜形成坑 { //需要从左向右 直到发现一个比key大的萝卜 i++; } data[j] = data[i]; } data[i] = key; //此时 在I左边的都比它小,I 右边的都比它大 Sort(data, left, i - 1); //递归调用让左边和右边的再次进行排序 Sort(data, i + 1, right); } int main() { int a[7] = { 2,1,4,5,7,6,3 }; Sort(a, 0, N - 1); Print2(a); }
快速排序理解
猜你喜欢
转载自blog.csdn.net/nan_feng_yu/article/details/79888865
今日推荐
周排行