選択ソートアルゴリズム(selection sort)について 質問No.1226692のつづき
BLUEPIXYさん、keikanさんありがとうございました。せっかく教えていただいたのですが、セグメンテーションエラーが出てしまいます。
選択法で基準値(pivot)を使用し、K番目に小さい要素を見つけるプログラムを作成しようとしています。しかし、コンパイル時にセグメンテーションフォルトメッセージが出力されるのですが、どこが間違っているのかわからず、途方にくれています。どなたか教えていただきたく。よろしく御願いいたします。
#include<stdio.h>
int s[100]={27,10,12,20,25,13,15,22};
int pivotpoint;
int selection(int, int, int);
//void partition(int, int, int);
main(){
int num;
num=selection(0,7,3);
printf("The third smallest is %d?n ", num);
}
int selection(int low,int high,int k)
{
void partition(int, int, int);
//int pivotpoint;
if(low==high)
return s[low];
else{
partition(low,high,pivotpoint);
if(k==pivotpoint)
return s[pivotpoint];
else if(k<pivotpoint)
return selection(low,pivotpoint-1,k);
else
return selection(pivotpoint+1,high, k);
}
}
void partition(int low,int high,int pivotpoint)
{
int i,j;
int pivotitem;
int tmp;
pivotitem=s[low];
j=low;
for(i=low+1;i<=high;i++){
if(s[i]<pivotitem){
j++;
tmp=s[i];
s[i]=s[j];
s[j]=tmp;
}
}
pivotpoint=j;
tmp=s[low];
s[pivotpoint]=s[low];
s[low]=tmp;
}