标签:
快速排序与归并排序相比,同样是递归,归并算法是递归分解数组之后再合并,而快速排序递归分解数组之前已经进行合并。
#include<stdio.h> int W_K_T_S(int a[] , int first , int last) { // 确定基准数并调整相应位置 int temp = a[first] ; int i = first , j = last ; while(i < j) { //把数组以基准数分为左右两个部分,前半部分比基准数小,后半部分比基准数大 for( ; a[j] > temp && j > i; j--) ; // 把后半部分比基准数小的元素挑出来放到前半部分相应位置 if(j > i) a[i] = a[j] ; for( ; a[i] < temp && i < j ; i++) ; // 把前半部分比基准数大的元素挑出来放到后半部分相应位置 if(i < j) a[j] = a[i] ; } a[i] = temp ; // 基准数放到中间 return i ; // 返回基准数所在的位置 } void q_sort(int a[] , int first , int last) { // 分解数组 if(first < last) { int mid = W_K_T_S(a,first,last) ; // 先调整合并同时返回基准数所在的位置 q_sort(a,first,mid) ; // 递归分解前半部分 q_sort(a,mid+1,last) ; // 递归分解后半部分 } } int main() { int a[] = {9,6,3,8,5,2,7,4,1,0} ; q_sort(a,0,9) ; for(int i = 0 ; i < 10 ; i++) printf("%d ",a[i]) ; printf("\n") ; return 0 ; }
标签:
原文地址:http://www.cnblogs.com/scottdinggo/p/4431560.html