xxxxxxxxxx
#include<stdio.h>
#define MAX 100
int insert_array(int a[]) {
int n, i;
printf("Quanti elementi?: ");
scanf("%d", &n);
for (i=0; i<n; i++) {
printf("elemento %d: ", i);
scanf("%d", &a[i]);
}
return(n);
}
void stampa_array(int a[], int n) {
int i;
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return;
}
void quicksort(int a[MAX],int primo,int ultimo){
int i, j, pivot, temp;
/*pivot -- inizialmente il pivot è il primo elemento
primo e ultimo sono le due variabili che servono per scorrere l'array
*/
if(primo<ultimo){
pivot=primo;
i=primo;
j=ultimo;
while(i<j){
while(a[i]<=a[pivot]&&i<ultimo)
i++;
while(a[j]>a[pivot])
j--;
if(i<j){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
temp=a[pivot];
a[pivot]=a[j];
a[j]=temp;
quicksort(a,primo,j-1);
quicksort(a,j+1,ultimo);
}
}
int main(){
int n, a[MAX],i;
n = insert_array(a);
printf("Array iniziale: ");
stampa_array(a,n);
quicksort(a,0,n-1);
printf("Array ordinato con quick-sort: ");
stampa_array(a,n);
return 0;
}
xxxxxxxxxx
#include <stdio.h>
int partition(int array[] , int low , int high){
int pivot = array[high] ;
int i = (low - 1) ;
for(int j = low ; j < high ; ++j ){
if(array[j] <= pivot){
++i ;
int temp = array[i] ;
array[i] = array[j] ;
array[j] = temp ;
}
}
int temp = array[i + 1] ;
array[i + 1] = array[high] ;
array[high] = temp ;
return (i + 1);
}
void QuickSort(int *array , int low , int high){
if (low < high){
int Pi = patition(array , low , high) ;
QuickSort(array , low , Pi -1 ) ;
QuickSort(array , Pi + 1 , high) ;
}
}
int main(int argc , char *argv[]) {
int arr[7] = { 8, 7, 2, 1, 0, 9, 6 } ;
QuickSort(arr , 0 , sizeof(arr) / sizeof(arr[0]) - 1);
}
xxxxxxxxxx
int cmpfunc (const void * a, const void * b) {
return ( *(int*)a - *(int*)b );
}