通用快排

來源:互聯網
上載者:User

    在快排中,這樣的數組元素被稱為樞軸——其前面的元素全都小於它(或大於),其後面的元素全都大於它(或小於)。如此,我們很容易想到,對於一個數組,如果其全部元素都可以被稱為樞軸,那麼,該數組就是一個已經排序好的數組。

    參考代碼:

#include <stdlib.h>#include <stdio.h>#include <string.h>static int partition(void* arr, int(*cmp)(void*, void*), int left, int right, int size){  char* tmp = (char*)malloc(size);  memcpy(tmp, (char*)arr + left * size, size);  while (left < right)  {    while (left < right && cmp((char*)arr + right * size, (char*)tmp) >= 0)--right;    memcpy((char*)arr + left * size, (char*)arr + right * size, size);    while (left < right && cmp((char*)arr + left * size, (char*)tmp) <= 0)++left;    memcpy((char*)arr + right * size, (char*)arr + left * size, size);  }  memcpy((char*)arr + right * size, (char*)tmp, size);  return right;}static void q_sort(void* arr, int(*cmp)(void*, void*), int left, int right, int size){  if (right <= left)    return;  int part = partition(arr, cmp, left, right, size);  q_sort(arr, cmp, left, part - 1, size);  q_sort(arr, cmp, part + 1, right, size);}void quicksort(void* arr, int n, int(*cmp)(void*, void*), int size){  q_sort(arr, cmp, 0, n - 1, size);}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.