總結一下快速排序演算法

2021-10-05 08:28:09 字數 1186 閱讀 8911

使用快速排序演算法將陣列中的數從小到大排序:先取陣列第乙個數作為key,陣列第乙個位置為first,陣列最後乙個元素作為last,last先和key比較,如果比key小,就把last放到first的位置。如果比key大,那麼last將減一,直到last的位置所在的數比key小,然後把last所在的位置放到first的位置。然後用first位置所在的數和key比,如果比key大就放到last的位置,如果比這個數小first的位置就加一,直到first所在的數比key大。然後把first所在的位置放到last所在的位置,然後在進行last所在位置的數和key比較,此時顯然last所在位置的數肯定比key大,因為此時last所在位置的數是之前first位置所在的數放過來的,因此last只好減一,知道遇到比key小的數。往復迴圈,直到first不再小於last。注意當first不再小於last的時候是first等於last的時候,而此時arr[first] = arr[last]和arr[last] = arr[first]依然得到了執行,因此快速排序是不穩定的,此時第一步排序完成。第一步排序完成後陣列就會被按key分成兩部分,前面部分中的數都比key小,後面部分的數都比key大。然後把這兩個部分按遞迴的方式完成第二次排序,第二步排序後陣列就會分成四個部分,隻後第三步排序將被分成八個部分,以此類推,直到排序結陣列不能再劃分為止,因此快速排序是很耗費記憶體的,遞迴的深度越身,耗費的記憶體越大。

#include void quicksort(int arr, int low, int high)

arr[first] = arr[last];

while(first < last && arr[first] < key)

arr[last] = arr[first];

}arr[first] = key;

quicksort(arr, low, first-1);

quicksort(arr, first+1, high);

}int main()

; for(i = 0; i < 10; i++)

printf("%d ", a[i]);

printf("\n");

quicksort(a, 0, 9);

for(i = 0; i < 10; i++)

printf("%d ", a[i]);

printf("\n");

return 0;

}

自己重寫了一下快速排序的演算法

今天上網看快速排序,發現這麼乙個經典的演算法網上貼出的 要不有bug,要不就是運算的步驟還是冗餘了,所以自己重新寫了個,看了下結果應該是減少大部分不需要的步驟。希望各位路過的道友幫忙驗證下有沒有bug 先貼下運算結果 startk 開始鍵值 endk結束鍵值 dg 遞迴深度 函式 public fu...

重溫一下各種排序演算法

最近打算用一些併發的模型研究一下排序演算法.所以,我首先回顧了一下各種排序演算法,並將它們用c語言實現了.氣泡排序 基本思想 先取第乙個元素,將它與後面n 1個元素比較,將n個元素中最小的移到首部.接著,忽略第乙個元素,取第二個元素,將它與後面的n 2個元素比較,將n 1個 元素中最小的移到位置2....

幾種濾波演算法,總結一下

最近在做武術擂台,發現對於紅外測距感測器的返回值速度很快,但是誤差值很大,經過簡單函式調校之後,發現還是有誤差,有干擾資料,於是匯入了math.h,進行的絕對值濾波,但是用迴圈暫存了十組資料,進行簡單的加權演算法,發現還是不行,於是去找了一些經典的濾波演算法,算是簡單記錄一下。分享給大家。1 限幅濾...