Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- void quicksort(int n, int m, int *a);
- void quicksort_rec(int low, int high, int *a, int m);
- int partition(int low, int high, int*a);
- void selectsort(int low, int high, int *a);
- int partition(int low, int high, int *a){
- int i=low, j=low, tmp;
- while (j<high){
- if (a[j]<a[high]){
- tmp=a[i];
- a[i]=a[j];
- a[j]=tmp;
- i+=1;
- }
- j+=1;
- }
- tmp=a[high];
- a[high]=a[i];
- a[i]=tmp;
- return i;
- }
- void selectsort(int low, int high, int *a){
- int i, j=high, k, tmp;
- while (j>low){
- k=j;
- i=j-1;
- while (i>=low){
- if (a[i]>a[k]) k=i;
- i-=1;
- }
- tmp=a[j];
- a[j]=a[k];
- a[k]=tmp;
- j-=1;
- }
- }
- void quicksort(int n, int m, int *a){
- quicksort_rec(0, n-1, a, m);
- }
- void quicksort_rec(int low, int high, int *a, int m){
- if (low<high){
- if (high-low+1<m) selectsort(low, high, a);
- else{
- int q = partition(low, high, a);
- quicksort_rec(low, q-1, a, m);
- quicksort_rec(q+1, high, a, m);
- }
- }
- }
- int main(int argc, char **argv){
- int n, m;
- scanf("%d%d", &n, &m);
- int a[n];
- for (int i=0; i<n; i++) scanf("%d", &a[i]);
- quicksort(n, m, a);
- for (int i=0; i<n; i++) printf("%d ", a[i]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement