快速排序能用for循环吗(C语言的)
刚学习的快速排序用的while循环,尝试了下能否用for循环替换,发现水平有限,不知有哪位鱼油有空,给出个方案?? 贴出你写的 while 循环版本,帮你改成 for 循环的版本。注意,要把代码贴进代码框内。 #include <stdio.h>void quick_sort(int array[], int left, int right);
void quick_sort(int array[], int left, int right)
{
int i = left, j = right;
int temp;
int pivot;
pivot = array[(left + right) / 2];
while (i <= j)
{
//从左到右找到大于等于基准点的元素
while(array < pivot)
{
i++;
}
//从右到左找到小于等于基准点的元素
while (array > pivot)
{
j--;
}
//如果i <= j,则互换
if (i <= j)
{
temp = array;
array = array;
array = temp;
i++;
j--;
}
}
if (left < j)
{
quick_sort(array, left, j);
}
if (i < right)
{
quick_sort(array, i, right);
}
}
int main(void)
{
int array[] = {73, 108, 111, 118 , 101, 70, 105, 115, 104, 67, 46, 99, 111, 109};
int i, length;
length = sizeof(array) / sizeof(array);
quick_sort(array, 0, length-1);
printf("排序后的结果是: ");
for (i = 0; i < length; i++)
{
printf("%d ", array);
}
putchar('\n');
return 0;
} jackz007 发表于 2022-9-24 23:30
贴出你写的 while 循环版本,帮你改成 for 循环的版本。注意,要把代码贴进代码框内。
谢谢,代码已发到3楼 本帖最后由 jackz007 于 2022-9-25 00:07 编辑
ROZE 发表于 2022-9-24 23:43
谢谢,代码已发到3楼
#include <stdio.h>
void quick_sort(int array[], int left, int right)
{
int temp , pivot , i = left , j = right ;
pivot = array[(left + right) / 2] ;
for(; i <= j ;) { // while 改 for -【1】
//从左到右找到大于等于基准点的元素
for(; array < pivot ; i ++) ; // while 改 for -【2】
//从右到左找到小于等于基准点的元素
for(; array > pivot ; j --) ; // while 改 for -【3】
//如果i <= j,则互换
if (i <= j) {
temp = array;
array = array;
array = temp;
i++;
j--;
}
}
if (left < j) quick_sort(array, left, j) ;
if (i < right) quick_sort(array, i, right) ;
}
int main(void)
{
int array[] = {73, 108, 111, 118 , 101, 70, 105, 115, 104, 67, 46, 99, 111, 109};
int i, length;
length = sizeof(array) / sizeof(array) ;
quick_sort(array, 0, length-1) ;
printf("排序后的结果是:%d" , array) ;
for(i = 1 ; i < length ; i ++) printf("\t%d" , array) ;
printf("\n") ;
}
页:
[1]