作為時間複雜度與空間複雜度均為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...