1. 程式人生 > >快速排序的實現--挖坑法

快速排序的實現--挖坑法

//*********************挖坑法(快排的一種實現方式)************************ int PartSort(int *a, intleft, intright) { int key = a [right]; int begin = left ; int end = right ; while (begin < end)                 { while (begin < end && a [begin] <= key) //begin找比key大的                                                 begin++;
if (begin < end)      //找到且begin < end則把begin的值給end,begin成為新的坑 a[end] = a [begin]; while (begin < end && a [end] >= key)  //end找比key小的                                                 end--; if (begin < end)    //找到且begin < end則把end的值給begin,end成為新的坑 a[begin] = a [end];                 }
//出了迴圈:end可能和begin指向同一個,把key的值給begin或者end都可以 //          end比begin小,則begin的位置一定是key的位置 //此處不做判斷,所以直接把key的值給a[begin] a[begin] = key; return begin; } void DigHoles(int *a, int left, int right) { assert(a ); if (left >= right) return; int mid = PartSort(a , left, right);                 DigHoles(
a, left , mid - 1);                 DigHoles( a, mid + 1, right ); } void DigHolesTest() { //int arr[] = { 2, 0, 4, 9, 3, 6, 8, 7, 1, 5 }; int arr[] = { 2, 5, 4, 9, 3, 5, 8, 7, 1, 5 }; int _size = sizeof (arr) / sizeof(arr[0]);                                                 DigHoles(arr, 0, _size - 1);                                                 Print(arr, _size); }