快速排序

来源:互联网 发布:新剑侠传奇网络异常 编辑:程序博客网 时间:2024/06/05 17:48

void swap(int *a, int *b)
{
  int t=*a; *a=*b; *b=t;
}

从两头开始查找,i计数 小于 pivot, (j计数)大于pivot, 然后交换, 这样继续下去,指导i>=j, 这样递归的执行新的两个数组,


void quicksort(int arr[],int beg,int end)
{
       if (end  >= beg + 1)
       {
               int piv = arr[beg], k = beg + 1, r = end;

               while (k < r)
               {
                       if (arr[k] < piv)
                               k++;
                       else
                               swap(&arr[k], &arr[r--]);
               }
               if (arr[k] < piv){

                       swap(&arr[k],&arr[beg]);

                       quicksort(arr, beg, k);
                       quicksort(arr, r, end);
               }else {
                       if (end - beg == 1)
                               return;

                       swap(&arr[--k],&arr[beg]);
                       quicksort(arr, beg, k);
                       quicksort(arr, r,   end);
               }
       }

}
int main()
{
       int i=0;
       int ar[7]={2, 1, 9, 11,3, 67, 3};
       quicksort(ar, 0, 6);
       for(i=0; i<7; i++)
       {
               printf("ar[%d]=%d\r\n", i, ar[i]);
       }
}

原创粉丝点击