quick sort

 

 

#include <stdio.h>
const int N = 1024;
int m, n, k;
int u[N] = {0};

void qsort(int nl, int nr)
{
 int mid = 0;
 int nt, mn;
 if(nl < nr) {
  mid = (nl + nr) / 2;
  mn = u[mid];
        int i = nl, j = nr;
  do {
   while(mn < u[j]) j--;
   while(mn > u[i]) i++;
   if(i <= j) {
                nt = u[j];
    u[j] = u[i];
    u[i] = nt;
    i++; j--;
   }
  } while(i <= j);
  qsort(nl, j);
  qsort(i, nr);
 }
}

int main()
{
 int step = 0;
    while(EOF != scanf("%d", &m))
    {
  for(int i = 0; i < m; i++) {
   scanf("%d%d", &n, &k);
   for(int j = 0; j < n; j++) {
    scanf("%d", &u[j]);
   }
   step = 0;
   do {
    int nt = 0, ni = 0, n1 = 0, n2 = 0;
     for(n1 = n - 2; n1 >= 0; n1--) {
     if(u[n1] < u[n1 + 1]) break;
    }
    if(n1 < 0) {
     for(n1 = 0; n1 < n / 2; n1++) {
      nt = u[n1];
      u[n1] = u[n - n1 - 1];
      u[n - n1 - 1] = nt;
     }
    }
    else {
     nt = 999999;
     for(int n2 = n1 + 1; n2 < n; n2++) {
      if(u[n2] > u[n1] && u[n2] < nt) {
       nt = u[n2];
       ni = n2;
      }
     }
     u[ni] = u[n1];
     u[n1] = nt;
     qsort(n1 + 1, n - 1);
    }
    step++;
   } while(step != k);
   for(int n3 = 0; n3 < n; n3++) {
    printf("%d ", u[n3]);
   }
   printf("\n");
  }
    }

    return 0;
}

 

你可能感兴趣的:(quick sort)