#include<stdio.h> #define SIZE 6 void Quick_Sort(int arr[],int begin ,int end); int main(int argc, char const *argv[]) { printf("www"); int arr[5] ={5,8,4,0,99}; int i =0; printf("6666"); Quick_Sort(arr,0 ,3); for(i=0;i<5;i++) { printf("%d",arr[i]); } return 0; } void Quick_Sort(int arr[],int begin ,int end) { if(begin >end) return; int tmp = arr[begin]; //key值 int i =begin; int j =end; while(i != j) { while(arr[j] >= tmp && j>i) //末尾的值与key值进行比较 j--; while(arr[i] <= tmp && j>i) //开头的值与key值进行比较 i--; if(j>i) { int t = arr[j]; arr[j] = arr[i]; arr[i] = t; } } arr[begin] = arr[i]; arr[i] = tmp; Quick_Sort(arr,begin,i-1); Quick_Sort(arr,i+1,end); }
时间: 2024-04-17 12:26:40 浏览: 106
这段代码是一个使用快速排序算法对数组进行排序的程序。快速排序是一种常用的排序算法,通过选择一个基准元素,将数组分成两个部分,一部分小于基准元素,一部分大于基准元素,然后递归地对两个部分进行排序。
在代码中,首先定义了一个宏SIZE来表示数组的大小。然后定义了一个Quick_Sort函数用于实现快速排序。在main函数中,先输出"www",然后初始化数组arr为{5, 8, 4, 0, 99},再输出"6666",接下来调用Quick_Sort函数对数组进行排序。
Quick_Sort函数中,首先判断begin和end的值,如果begin大于end,则直接返回。然后选取arr[begin]作为基准元素tmp,并设置两个指针i和j分别指向begin和end。接着进行循环,其中i和j不相等时进行以下操作:从末尾开始找到第一个小于tmp的元素,从开头开始找到第一个大于tmp的元素,然后交换这两个元素的位置。最后将arr[begin]和arr[i]交换位置。
然后对前半部分和后半部分进行递归调用Quick_Sort函数。
最后在main函数中使用for循环输出排序后的数组。
这段代码有一个错误,就是在内层while循环中,判断条件应该是j>i,而不是j>i,导致死循环。应该将while(arr[i] <= tmp && j>i)中的">"改为"<"。
经过修改后的代码如下:
```c
#include<stdio.h>
#define SIZE 5
void Quick_Sort(int arr[],int begin ,int end);
int main(int argc, char const *argv[])
{
printf("www");
int arr[SIZE] ={5,8,4,0,99};
int i =0;
printf("6666");
Quick_Sort(arr,0 ,SIZE-1);
for(i=0;i<SIZE;i++)
{
printf("%d",arr[i]);
}
return 0;
}
void Quick_Sort(int arr[],int begin ,int end)
{
if(begin >= end)
return;
int tmp = arr[begin]; //key值
int i =begin;
int j =end;
while(i != j)
{
while(arr[j] >= tmp && j>i) //末尾的值与key值进行比较
j--;
while(arr[i] <= tmp && j>i) //开头的值与key值进行比较
i++;
if(j>i)
{
int t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
arr[begin] = arr[i];
arr[i] = tmp;
Quick_Sort(arr,begin,i-1);
Quick_Sort(arr,i+1,end);
}
```
这样就修复了代码中的错误,并且能正确地对数组进行快速排序。
阅读全文