2017-10-03 12 views
-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; 
} 
+1

何エラー?コードを書式設定します。 –

+0

あなたのアルゴリズムの各反復でソートされるアイテムの状態を印刷し、ソートを手動で行うときにそれをexected出力と比較しようとしましたか?エラーを見つけようとすると何をしましたか?あなたはデバッガではありません。 –

+0

ようこそstackoverflow.com [ヘルプページ](http://stackoverflow.com/help)、特に[ここではどのトピックを聞くことができますか?](http://stackoverflow.com/help/)のセクションを読んでください。 on-topic)と[[どのような種類の質問を避けるべきですか?]](http://stackoverflow.com/help/dont-ask)を参照してください。また、[ツアーを受けてください](http://stackoverflow.com/tour)と[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)もご覧ください。 –

答えて

0

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

の単純な実装の問題は(あなたのパーティションのこの文である) -

 if(arr[j]<=pivot){ 

に変更それを -

 if(arr[j]<pivot){