user-0 提问: 看一下我这个快排那错了？

回复:
user: user-1
content: 引用 8 楼 u011919606 的回复:[quote=引用 7 楼 liukeyong2110 的回复:] [quote=引用 6 楼 u011919606 的回复:] 你能不能给我说说为什么while换成if，我觉得在这里while和if一样，都是只执行一次quickSort.  递归变量的作用域，你传入的不是指针。所以呢，你函数里while循环里的low 和high没有改变，循环不会终止。  在while循环中添加 printf("%d,%d\n",low,high);                  // 调试一下你就知道了[/quote]  我懂你的意思了，当用while的时候，会一直卡在倒数第二步的递归上，无限循环下去。[/quote]  是的

user: user-0
content: 引用 7 楼 liukeyong2110 的回复:[quote=引用 6 楼 u011919606 的回复:] 你能不能给我说说为什么while换成if，我觉得在这里while和if一样，都是只执行一次quickSort.  递归变量的作用域，你传入的不是指针。所以呢，你函数里while循环里的low 和high没有改变，循环不会终止。  在while循环中添加 printf("%d,%d\n",low,high);                  // 调试一下你就知道了[/quote]  我懂你的意思了，当用while的时候，会一直卡在倒数第二步的递归上，无限循环下去。

user: user-1
content: 引用 6 楼 u011919606 的回复:你能不能给我说说为什么while换成if，我觉得在这里while和if一样，都是只执行一次quickSort.  递归变量的作用域，你传入的不是指针。所以呢，你函数里while循环里的low 和high没有改变，循环不会终止。  在while循环中添加 printf("%d,%d\n",low,high);                  // 调试一下你就知道了

user: user-0
content: 你能不能给我说说为什么while换成if，我觉得在这里while和if一样，都是只执行一次quickSort.

user: user-2
content: 看我的博客，可以参考

user: user-1
content: 21行，while改成if即可。 再删去你的调试语句。  #include<stdio.h>  void quickSort(int *array, int low, int high); int findPos(int *array, int low, int high);  int main() { 	int i; 	int array[6] = { 8, 9, 3, 0, 4, 5 }; 	quickSort(array, 0, 5); 	for (i = 0; i<6; i++) 	{ 		printf("%d\n", array[i]); 	} 	return 0; }  void quickSort(int *array, int low, int high) { 	int pos; 	if (low < high) 	{ 		pos = findPos(array, low, high); 		printf("%d\n", pos); 		quickSort(array, low, pos - 1); 		quickSort(array, pos + 1, high); 	} }  int findPos(int *array, int low, int high) { 	int value = array[low]; 	while (low<high) 	{ 		while (low<high && value <= array[high]) //high指针所指的数据比value大的且high指针不等于low指针，high指针向左移 		{ 			high--; 		} 		array[low] = array[high];//high指针所指的数据比value小的，直接向左赋值 		while (low<high && value >= array[low])//low指针所指的数据比value小的且high指针不等于low指针，low指针向右移 		{ 			low++; 		} 		array[high] = array[low];//low指针所指的数据比value大的，直接向右赋值。 	} 	array[low] = value;  	return high; }

user: user-3
content: 一共5处修改： #include<stdio.h>   void quickSort(int *array,int low,int high); int findPos(int *array,int low,int high);   int main() {     int i;     int array[6] = {8,9,3,0,4,5};     quickSort(array,0,5);     for(i=0;i<6;i++)     {         printf("%d\n",array[i]);     }     return 0; }   void quickSort(int *array,int low,int high) {     int pos;     if (low < high)  // 改1： while --> if     {         pos = findPos(array,low,high);         printf("%d\n",pos);         quickSort(array,low,pos-1);         quickSort(array,pos+1,high);     } }   int findPos(int *array,int low,int high) {     int value = array[low];     while(low<high)     {         while(low<high && value<=array[high]) //high指针所指的数据比value大的且high指针不等于low指针，high指针向左移         {             high--;         } if (low < high) // 改2         array[low++ /* 改3 */] = array[high];//high指针所指的数据比value小的，直接向左赋值         while(low<high && value>=array[low])//low指针所指的数据比value小的且high指针不等于low指针，low指针向右移         {             low++;         } if (low < high) // 改4         array[high-- /* 改5 */] = array[low];//low指针所指的数据比value大的，直接向右赋值。     }     array[low] = value;       return high; }

user: user-4
content: 最好自己一步步调试一下，这样对自己有好处，对算法也可以理解的更透彻，这只是我个人的意见，希望对你有帮助

user: user-5
content: 快速排序 http://blog.csdn.net/zhangxiangdavaid/article/details/25436609