#include <stdio.h>
void swap(int data[], int a, int b) {
int temp = 0;
temp = data[a];
data[a] = data[b];
data[b] = temp;
}
int partition(int data[], int left, int right) {
int pivot = data[left];
int low = left +1;
int high = right;
while (low <= high)
{
while (low <= right && pivot >= data[low])
low++;
while (high >= (left+1) && pivot <= data[high])
high--;
if (low <= high) {
swap(data, low, high);
}
}
swap(data, left, high);
return high;
}
void quick_select(int data[], int left, int right, int k) {
int pivot = 0;
if (left >= right) {
return;
}
pivot = partition(data, left, right);
if (pivot == k)
return;
else if (pivot > k)
quick_select(data, left, pivot -1, k);
else if (pivot < k)
quick_select(data, pivot +1, right, k);
}
int main(void) {
int i = 0;
int data[100];
int n = 0;
int k = 0;
printf("number = ?\n");
scanf("%d", &n);
printf("k = ?\n");
scanf("%d", &k);
srand(time(NULL));
for (i = 0; i < n; i++) {
data[i] = rand()%1000;
}
printf("before\n");
for (i = 0; i < n; i++) {
printf("%d ", data[i]);
}
printf("\n");
quick_select(data, 0, n-1, k);
printf("after\n");
for (i = 0; i < n; i++) {
printf("%d ", data[i]);
}
printf("\n");
return 0;
}