|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
void swap(int array[], int left, int right)
{
int temp;
temp = array[left];
array[left] = array[right];
array[right] = temp;
}
int partition(int array[], int left, int right)
{
int pivot = array[left];
while(left <= right)
{
while(left < right && pivot <= array[right])
{
right--;
}
swap(array, left, right);
while(left < right && array[left] <= pivot)
{
left++;
}
swap(array, left, right);
}
return left;
}
void quick_show(int array[], int left, int right)
{
int pivot;
while(left < right)
{
pivot = partition(array, left, right);
quick_show(array, left , pivot -1);
quick_show(array, pivot +1, right);
}
}
void quick_sort(int array[], int length)
{
int left = 0, right = length -1;
quick_show(array, left, right);
}
int main()
{
int array[] = {1, 4, 7, 2, 5, 8, 3, 6, 9};
int length = sizeof(array) / sizeof(array[0]);
quick_sort(array, length);
printf("排序后的结果是:");
int i;
for(i = 0; i < length; i++)
{
printf("%d ", array[i]);
}
putchar('\n');
return 0;
}
@FishC,帮我看下代码哪里有问题?
本帖最后由 jackz007 于 2024-4-6 23:37 编辑 #include <stdio.h>
void swap(int array[] , int left , int right)
{
int temp ;
temp = array[left] ;
array[left] = array[right] ;
array[right] = temp ;
}
int partition(int array[] , int left , int right)
{
int pivot = left ;
while(left < right)
{
while(left < right && array[pivot] <= array[right]) // 【修改】
{
right -- ;
}
// 【删除】 swap(array , left , right) ;
while(left < right && array[left] <= array[pivot]) // 【修改】
{
left ++ ;
}
swap(array , left , right) ;
}
swap(array , pivot , left) ; // 【添加】
return left ;
}
void quick_show(int array[], int left, int right)
{
int pivot ;
while(left < right)
{
pivot = partition(array , left, right) ;
quick_show(array , left , pivot - 1) ;
quick_show(array , pivot + 1 , right) ;
left ++ ; // 【添加】
right -- ; // 【添加】
}
}
void quick_sort(int array[], int length)
{
int left = 0 , right = length - 1 ;
quick_show(array , left , right) ;
}
int main()
{
int array[] = {1, 4, 7, 2, 5, 8, 3, 6, 9} ;
int length = sizeof(array) / sizeof(array[0]) ;
quick_sort(array , length) ;
printf("排序后的结果是:") ;
for(int i = 0 ; i < length ; i ++) //【修改】:略有修改,循环内增加 int i 定义
{
printf("%d ", array[i]) ;
}
putchar('\n') ;
return 0 ;
}
|
|