#include <stdio.h>
#include <conio.h>
int partition(int A[],int p, int r){
    int tmp;
    int x = A[r];
    int i = p-1;
    int counter = 0;
    
    for(int j=p; j<=r-1; j++)
    {
        if(A[j]<=x)
        {
            i++;
            tmp=A[i];
            A[i]=A[j];
            A[j]=tmp;
            counter++;
        }
        
    }
    printf("\nquick counter : %d",counter);
    tmp=A[i+1];
    A[i+1]=A[r];
    A[r]=tmp;
    return i+1;
}
void quickSort(int A[],int p, int r)
{
    int q;
    if(p<r)
    {
        q=partition(A,p, r);
        quickSort(A,p, q-1);
        quickSort(A,q+1, r);
    }
}
void selectionsort(int  A[],int n)
  {
    int tmp;
    int min;
    int counter = 0;
    for(int i=0; i < n-1; i++)
    {
      min=i;

      for(int j=i; j < n-1; j++)
      {
        if (A[j] < A[min]){

          min=j;
        }
        counter ++;

      }
        tmp=A[i];
        A[i]=A[min];
        A[min]=tmp;
    }
    printf("\n selection counter : %d",counter);
    
  }
void bubblesort(int  A[],int n) // bir diziyi parametre alan fonksiyon
  {

     int tmp;
     int counter = 0;
    for(int i=0; i<n; i++)
    {
 
        for(int j=n; j>i;j--) //i'ye kadar olan kısmı sabitlendiği için tekrar geçişlerde kontrolü gerekmemektedir.
      {
        if(A[j-1]>A[j])
        {
                       counter ++;
          tmp=A[j-1];
          A[j-1]=A[j];
          A[j]=tmp;
        }
      }
    }
    printf("\n bubble counter : %d",counter);
  }
  
int main(){
    int a[10]={3,2,8,7,6,1,9,0,5,4};
    printf("sayilar:");
    for(int i = 0;i<10;i++){
            printf("%d ",a[i]);
    }
    quickSort(a,0,10);
    printf("\nsiralı:");
    for(int i = 0;i<10;i++){
            printf("%d ",a[i]);
    }
    int b[10]={3,2,8,7,6,1,9,0,5,4};
    bubblesort(b,10);
    printf("\nsiralı bubble:");
    for(int i = 0;i<10;i++){
            printf("%d ",b[i]);
    }
     int c[10]={3,2,8,7,6,1,9,0,5,4};
    selectionsort(b,10);
    printf("\nsiralı selection:");
    for(int i = 0;i<10;i++){
            printf("%d ",b[i]);
    }
    getch();
}
    
    
    
    
    
    
    
    
    
    
    
