一个快速排序,写的不好,大家多提意见,谢谢了..
/* *Quick Sort For Array *Date:20120531 *Author:Alan */ #include <stdio.h> #include <stdlib.h> typedef int Status; Status InitArray(int **arr, int length) { int i; *arr = (int*)malloc(length * sizeof(int)); if(*arr == NULL){ return 0; } for(i = 0; i < length; i++) { (*arr)[i] = random()%10; } return 1; } void PrintArray(int arr[], int length) { int i; for(i = 0; i < length; i++) { printf("%d---", arr[i]); } printf("\n"); } void Swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } int Patition(int array[], int begin, int end) { int keyPos = (begin + end)/2; int keyData = array[keyPos]; int i = begin; int j = end; if(begin > end) { return; } while(i != j) { while(i < keyPos && array[i] <= keyData) { i++; } if(i < keyPos) { Swap(&array[i], &array[keyPos]); keyPos = i; } while(keyPos < j && array[j] >= keyData) { j--; } if(keyPos < j) { Swap(&array[j], &array[keyPos]); keyPos = j; } } printf("keyPos = %d", i); return i; /////////////////////////////////////////////// /* * Another method * using first * element be the keyData */ /* int i, j, temp; i = begin; j = end; temp = array[begin]; if(begin > end) return; while(i != j) { while(array[j] >= temp && j > i) j--; if(j > i) array[i++] = array[j]; while(array[i] <= temp && j > i) i++; if(j > i) array[j--] = array[i]; } array[i] = temp; QuickSort(array, begin, i - 1); QuickSort(array, i + 1, end); */ //////////////////////////////////////////// } void QuickSort(int array[], int begin, int end) { if(begin < end){ int p = Patition(array, begin, end); QuickSort(array, begin, p - 1); QuickSort(array, p + 1, end); } } void main() { int *array; int length; printf("How many numbers you want to generate!\n"); scanf("%d", &length); if(InitArray(&array, length)) { printf("Array before Quick Sort!\n"); PrintArray(array, length); QuickSort(array, 0, length-1); } printf("After Sort \n"); PrintArray(array, length); free(array); }