/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * This program demonstrates the use of the quick sort algorithm. For * more information about this and other sorting algorithms, see * http://linux.wku.edu/~lamonml/kb.html * */ /******* * Jim M: * from http://linux.wku.edu/~lamonml/algor/sort/quick.html on 2/14/2007 * * This version is designed to be used with qs_main.c . * ********** */ #include #include #include "qs.h" long count; // return how many steps the quicksort took long quickSort(int numbers[], int array_size){ count = 0; q_sort(numbers, 0, array_size - 1); return count; } void q_sort(int numbers[], int left, int right){ int pivot, l_hold, r_hold; l_hold = left; r_hold = right; pivot = numbers[left]; while (left < right) { while ((numbers[right] >= pivot) && (left < right) && count++>=0){ right--; } if (left != right) { numbers[left] = numbers[right]; left++; } while ((numbers[left] <= pivot) && (left < right) && count++>=0){ left++; } if (left != right) { numbers[right] = numbers[left]; right--; } } numbers[left] = pivot; pivot = left; left = l_hold; right = r_hold; if (left < pivot){ q_sort(numbers, left, pivot-1); } if (right > pivot){ q_sort(numbers, pivot+1, right); } }