C語言 用C語言實現快速排序

2021-10-01 19:40:09 字數 1513 閱讀 7231

快速排序時間複雜度為o(nlogn),是陣列相關的題目當中經常會用到的演算法。

在c語言中,陣列作為引數傳遞時會轉換為指向陣列起始位址的指標,非陣列形式的資料實參均以傳值形式呼叫。

下列兩種形式的傳參時等價的,他們均指向陣列a的初始位址。

void

test

(int a)

;void

test

(int

*a);

因此test中的實際上是乙個指標,對a[i]進行操作就是對*(a + i)操作。

由於test中的a是乙個指標,因此若在test中呼叫陣列a,應當直接呼叫,而不是&a&a實質上是指向陣列a的指標的位址,呼叫它進行操作會出錯。

錯誤示範:

void

test

(int

*a)

在main函式中呼叫test時,test11無法執行,因為傳入它的引數是指向陣列a的指標的位址。

正確呼叫方式:

void

test

(int

*a)了解上述知識點後,開始寫快速排序函式。

快速排序函式:

void

quicksort

(int

*a,int left,

int right)

while

((i < j)

&&(a[i]

< base)

) i++;if

(i < j)

} a[i]

= base;

quicksort

(a, left, i -1)

;quicksort

(a, i +

1, right)

;}

主函式:

int

main()

;int len =

sizeof

(a)/

sizeof

(int);

for(

int i =

0; i < len; i++

)printf

("\n");

quicksort

(&a,

0,len -1)

;for

(int i =

0; i < len; i++

)printf

("\n");

return0;

}

執行結果:

快速排序是一種不穩定演算法,因此陣列當中的兩個4的相對位置發生了變化。

C語言實現快速排序

快速排序,是氣泡排序的改進,通過尋找 中間元素 在一趟排序中,把比 中間元素 小的數放到左邊,比 中間元素 大的數放到右邊,如此遞迴,最終得到排序結果。include define num 5 void quick sort int a,int left,int right void swap in...

c語言實現快速排序

快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽結束...

快速排序 C語言實現

以前使用rm時,ruby指令碼提供乙個sort函式,可以把陣列進行排序,後來得知採用的演算法是快速排序。隨著資料結構課程的學習,快速排序如今也不再神秘,如下 using namespace std void quicksort int a,int low,int high int first low...