c - 快速排序实现麻烦

标签 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);
}

//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;
}

最佳答案

QuickSort算法的简单实现

 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;
   }
}

关于c - 快速排序实现麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46547276/

相关文章:

c - 寻找字谜

c - 使用共享库中定义的 C 函数而不重命名它们

javascript - 带有 Fancybox 的 IE8 中的 jQuery 问题

c# - 在 session 中缓存搜索结果与保持大对象堆清洁

c - 尝试了解在迭代反转链表时列表如何被修改

debugging - 如何调试 Oracle 中 PL/SQL 集合的值?

debugging - 在运行时在内存中搜索和替换 SSL 证书

java - Spring 4 迁移 : OutOfMemoryError: PermGen Space

mysql - 什么是 SQL 错误 : 5, SQLState : HY000? 以及什么可能导致此错误?

c - ncurses 基本示例 - 在调试中我得到 : "Error opening terminal: unknown."