modernc.org/ccgo/v3@v3.16.14/lib/testdata/tcc-0.9.27/tests/tests2/25_quicksort.c (about)

     1  #include <stdio.h>
     2  
     3  int array[16];
     4  
     5  //Swap integer values by array indexes
     6  void swap(int a, int b)
     7  {
     8     int tmp  = array[a];
     9     array[a] = array[b];
    10     array[b] = tmp;
    11  }
    12  
    13  //Partition the array into two halves and return the
    14  //index about which the array is partitioned
    15  int partition(int left, int right)
    16  {
    17     int pivotIndex = left;
    18     int pivotValue = array[pivotIndex];
    19     int index = left;
    20     int i;
    21  
    22     swap(pivotIndex, right);
    23     for(i = left; i < right; i++)
    24     {
    25        if(array[i] < pivotValue)
    26        {
    27           swap(i, index);
    28           index += 1;
    29        }
    30     }
    31     swap(right, index);
    32  
    33     return index;
    34  }
    35  
    36  //Quicksort the array
    37  void quicksort(int left, int right)
    38  {
    39     if(left >= right)
    40        return;
    41  
    42     int index = partition(left, right);
    43     quicksort(left, index - 1);
    44     quicksort(index + 1, right);
    45  }
    46  
    47  int main()
    48  {
    49     int i;
    50  
    51     array[0] = 62;
    52     array[1] = 83;
    53     array[2] = 4;
    54     array[3] = 89;
    55     array[4] = 36;
    56     array[5] = 21;
    57     array[6] = 74;
    58     array[7] = 37;
    59     array[8] = 65;
    60     array[9] = 33;
    61     array[10] = 96;
    62     array[11] = 38;
    63     array[12] = 53;
    64     array[13] = 16;
    65     array[14] = 74;
    66     array[15] = 55;
    67  
    68     for (i = 0; i < 16; i++)
    69        printf("%d ", array[i]);
    70  
    71     printf("\n");
    72  
    73     quicksort(0, 15);
    74  
    75     for (i = 0; i < 16; i++)
    76        printf("%d ", array[i]);
    77  
    78     printf("\n");
    79  
    80     return 0;
    81  }
    82  
    83  /* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/