#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define SWAP(A,B) {int t; t = (A); (A) = (B); (B) =t;}
int kbig(int number[], int left, int right, int k);
int partition(int number[], int left, int right);
void quicksort_m(int number[], int left, int right);
void quicksort(int number[], int left, int right);
int main(int argc, char* argv[]){
int i = 0;
int number[100];
srand(time(NULL));
for( i = 0; i< 100; i++)
{
number[i] = rand() % 100;
printf("%d,", number[i]);
}
printf("\n\n");
kbig(number, 0, 99, 10);
for(i = 0 ; i<100; i++ )
printf("%d,", number[i]);
quicksort(number, 0, 99);
printf("\n\n");
for( i = 0; i< 100; i++)
{
printf("%d,", number[i]);
}
getchar();
return 0;
}
int partition(int number[], int left, int right){
int i,j ,s;
i = left -1;
j = right +1;
SWAP(number[left], number[(left+right)/2]);
s = number[left];
while(1){
while( number[++i] < s);
while( number[--j] > s);
if( i >= j )
break;
SWAP(number[i], number[j]);
}
number[left] = number[j];
number[j] = s;
return j;
}
int kbig(int number[], int left, int right, int k){
int count = 0;
if(right - left <= k)
return left;
count = partition(number,left,right);
if( right - count > k)
kbig(number, count+1,right,k);
else if( right - count < k)
kbig(number, left,count -1, k-right+count);
else
return count;
}
void quicksort(int number[], int left, int right){
int j;
if(left < right){
j = partition(number,left,right);
quicksort(number, left, j-1);
quicksort(number, j+1, right);
}
}
void quicksort_m(int number[], int left, int right)
{
int i, j, s;
if(left < right){
i = left-1;
j = right+1;
SWAP(number[left], number[(left+right)/2]);
s = number[left];
while(1){
while( number[++i] < s);
while( number[--j] > s);
if( i >= j)
break;
SWAP(number[i], number[j]);
}
number[left] = number[j];
number[j] = s;
quicksort_m(number, left, j-1);
quicksort_m(number, j+1, right);
}
}
#include <time.h>
#include <stdlib.h>
#define SWAP(A,B) {int t; t = (A); (A) = (B); (B) =t;}
int kbig(int number[], int left, int right, int k);
int partition(int number[], int left, int right);
void quicksort_m(int number[], int left, int right);
void quicksort(int number[], int left, int right);
int main(int argc, char* argv[]){
int i = 0;
int number[100];
srand(time(NULL));
for( i = 0; i< 100; i++)
{
number[i] = rand() % 100;
printf("%d,", number[i]);
}
printf("\n\n");
kbig(number, 0, 99, 10);
for(i = 0 ; i<100; i++ )
printf("%d,", number[i]);
quicksort(number, 0, 99);
printf("\n\n");
for( i = 0; i< 100; i++)
{
printf("%d,", number[i]);
}
getchar();
return 0;
}
int partition(int number[], int left, int right){
int i,j ,s;
i = left -1;
j = right +1;
SWAP(number[left], number[(left+right)/2]);
s = number[left];
while(1){
while( number[++i] < s);
while( number[--j] > s);
if( i >= j )
break;
SWAP(number[i], number[j]);
}
number[left] = number[j];
number[j] = s;
return j;
}
int kbig(int number[], int left, int right, int k){
int count = 0;
if(right - left <= k)
return left;
count = partition(number,left,right);
if( right - count > k)
kbig(number, count+1,right,k);
else if( right - count < k)
kbig(number, left,count -1, k-right+count);
else
return count;
}
void quicksort(int number[], int left, int right){
int j;
if(left < right){
j = partition(number,left,right);
quicksort(number, left, j-1);
quicksort(number, j+1, right);
}
}
void quicksort_m(int number[], int left, int right)
{
int i, j, s;
if(left < right){
i = left-1;
j = right+1;
SWAP(number[left], number[(left+right)/2]);
s = number[left];
while(1){
while( number[++i] < s);
while( number[--j] > s);
if( i >= j)
break;
SWAP(number[i], number[j]);
}
number[left] = number[j];
number[j] = s;
quicksort_m(number, left, j-1);
quicksort_m(number, j+1, right);
}
}