C 快速排序实现问题
我在执行快速排序算法时遇到问题。 我遇到了一个错误,但无法找到问题所在。如果有人能指出错误所在,我将非常感激C 快速排序实现问题,c,debugging,out-of-memory,quicksort,C,Debugging,Out Of Memory,Quicksort,我在执行快速排序算法时遇到问题。 我遇到了一个错误,但无法找到问题所在。如果有人能指出错误所在,我将非常感激 #include <stdio.h> #include <stdlib.h> void main(){ int arr[] = {10, 7, 8, 9, 1, 5}; int n = sizeof(arr)/sizeof(arr[0]); quickSort(arr,0,n-1); printArray(arr,0,n-1);
#include <stdio.h>
#include <stdlib.h>
void main(){
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr)/sizeof(arr[0]);
quickSort(arr,0,n-1);
printArray(arr,0,n-1);
}
//Quicksort Function
void quickSort(int arr[],int low,int high){
if (low < high){
int pi=partition(arr,low,high);
quickSort(arr,low,pi-1);//takes care of lower set of numbers
quickSort(arr,pi+1,high);//takes care of higher elements above pivot
}
}
//Function for partitioing, in my program i am cosidering pivot as the element at high or the last element
int partition(int arr[],int low,int high){
int i,j;
i=(low-1);
int pivot=arr[high];
for(j=low;j<=high;j++){
if(arr[j]<=pivot){
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i+1], &arr[high]);
return (i+1);
}
//function to print array
void printArray(int arr[],int low,int high){
int i;
for(i=low;i<=high;i++){
printf("%d ",arr[i]);
}
}
//function to swap two elements of array
void swap(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
#包括
#包括
void main(){
int arr[]={10,7,8,9,1,5};
int n=sizeof(arr)/sizeof(arr[0]);
快速排序(arr,0,n-1);
打印阵列(arr,0,n-1);
}
//快速排序函数
无效快速排序(整数arr[],整数低,整数高){
如果(低<高){
int pi=分区(arr、低、高);
快速排序(arr,low,pi-1);//处理较低的数字集
快速排序(arr,pi+1,high);//处理pivot上方的较高元素
}
}
//用于分区的函数,在我的程序中,我将轴作为高位元素或最后一个元素
整数分区(整数arr[],整数低,整数高){
int i,j;
i=(低-1);
int pivot=arr[高];
对于(j=low;j快速排序算法的简单实现
void q_sort(int v[],int left,int right)
{
int i,last;
if(left>=right)
return;
swap(v,left,(left+right)/2);
last=left;
for(i=left+1;i<=right;i++)
if(v[i]<v[left])
swap(v,++last,i);
swap(v,left,last);
q_sort(v,left,last-1);
q_sort(v,last+1,right);
}
void swap(int v[],int i,int j)
{
int temp;
if(i!=j){
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
}
void q_排序(int v[],int左,int右)
{
int i,最后;
如果(左>=右)
返回;
交换(v,左,(左+右)/2);
最后=左;
对于(i=left+1;i问题在于分区()的这个语句-
if(arr[j]什么错误?并格式化您的代码。您是否尝试过在算法的每次迭代中打印要排序的项的状态,并在手动排序时将其与执行的输出进行比较?您做了哪些尝试来查找错误?因此不适合您。欢迎访问stackoverflow.com。请花一些时间阅读,尤其是特别是名为和的部分。还有请和。我还建议您花一些时间阅读Eric Lippert的文章,并学习如何使用调试器逐行检查代码。
if(arr[j]<=pivot){
if(arr[j]<pivot){