C語言快排

2021-10-08 06:16:16 字數 1265 閱讀 2201

作為時間複雜度與空間複雜度均為o(nlogn)的排序演算法——快速排序,本文主要介紹它的簡單函式呼叫及其詳細的**實現

#include#includeint main()

陣列型別不同,比較函式會有些微的差異

首先在函式的形參處,使用const void*,表示無型別指標,也就是說可以接受任意型別的指標

其次,在返回值處,可以將該過程分為三個步驟:

1)將形參進行強制型別轉換為相應型別的指標:p =(int*)a

2)然後取值*p

3)進行大小比較,返回值有三種型別:正、0、負

具體而言,對於數字:

int cmp(const void*a,const void*b)

對於結構體:

int cmp( const void *a , const void *b)

對於二維陣列:

int cmp(const void *a, const void *b)

演算法的基本思想:(以公升序排序為例)

首先定義乙個中間值,經過一次排序後,陣列左邊的值都比該值小,陣列右邊的值都比該值大

所以,分別從左開始找到第乙個大於該中間值的數,從右開始找到第乙個小於該中間值的數,然後將兩者進行交換

依次進行至兩個過程相遇

然後對該中間值的左右兩端分別進行該過程,最後可以將整個陣列排序完畢

#includevoid sort(int *a, int left, int right)//由小到大 

int i = left;

int j = right;

int key = a[left];

while(i < j)

a[i] = a[j];

while(i < j && key >= a[i])

a[j] = a[i];

}a[i] = key;

sort(a, left, i - 1);

sort(a, i + 1, right);

}/*void sort(int b,int lef,int rig)//由大到小

b[le]=temp;

if(le>lef)

sort(b,lef,ri-1);

if(risort(b,ri+1,rig);

}*/int main()

C語言快排

1 2 tue mar 24 20 07 26 202034 目的 快速排序 5結論 快排真難,演算法頭禿 6功能 首先取陣列首端元素為基準數 temp 先從右往左依次比較出首個 7比基準數小的元素,再從左往右依次比較出首個比基準數大的元素,兩者 8互換,重複以上操作,注意先右後左,直到i j,a ...

C語言快排函式qsort

原本以為c語言中的快排函式都要靠自己去實現,今天才知道,原來qsort就是c語言中的快排函式,包含在stdlib.h標頭檔案中,函式一共有四個引數,沒有返回值。int cmp const void const void qsort s,n,sizeof s 0 cmp 其中第乙個引數s是乙個位址,即...

c語言之qsort(快排)

1.先看函式原型 void qsort void base,size t nitems,size t size,int compar const void const void 引數描述 1.1.base 指向要排序的陣列的第乙個元素的指標。2.nitems 由 base 指向的陣列中元素的個數。3...