C語言簡單實現(xiàn)快速排序
快速排序是一種不穩(wěn)定排序,它的時間復(fù)雜度為O(n·lgn),最壞情況為O(n2);空間復(fù)雜度為O(n·lgn)。
這種排序方式是對于冒泡排序的一種改進,它采用分治模式,將一趟排序的數(shù)據(jù)分割成獨立的兩部分,其中一組數(shù)據(jù)的每個值都小于另一組。每一趟在進行分類的同時實現(xiàn)排序。
其中每一趟的模式通過設(shè)置key當(dāng)基準(zhǔn)元素,key的選擇可以是數(shù)據(jù)的第一個,也可以是數(shù)據(jù)的最后一個。這里以每次選取數(shù)據(jù)的第一個為例:
具體代碼實現(xiàn):
#include<stdio.h> #define N 6 int fun(int arr[],int low,int high) { int key; key=arr[low]; while(low<high) { while(low<high && arr[high]>=key) high--; if(low<high) arr[low++]=arr[high]; while(low<high && arr[low]<=key) low++; if(low<high) arr[high--]=arr[low]; } arr[low]=key; return low; } void quick_sort(int arr[],int start,int end) { int pos; if(start<end) { pos=fun(arr,start,end); quick_sort(arr,start,pos-1); quick_sort(arr,pos+1,end); } } int main() { int i; int arr[N]={32,12,7,78,23,45}; for(i=0;i<N;i++) { printf("%d ",arr[i]); } printf("\n"); quick_sort(arr,0,N-1); for(i=0;i<N;i++) { printf("%d ",arr[i]); } return 0; }
由于是第一次撰寫博客,許多地方?jīng)]有一個良好的習(xí)慣,還請讀者見諒。創(chuàng)建這個博客的目的實際上是為了讓自己對于數(shù)據(jù)結(jié)構(gòu)與算法加深印象,通過博客的形式展現(xiàn)出來一方面方便自己查閱,另一方面以希望能夠通過自己的微薄之力幫助到有需要的朋友。
也希望自己能夠堅持下去,認(rèn)真的去做這么一件事。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++利用多態(tài)實現(xiàn)職工管理系統(tǒng)(項目開發(fā))
這篇文章主要介紹了C++利用多態(tài)實現(xiàn)職工管理系統(tǒng)(項目開發(fā)),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01C語言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法
這篇文章主要介紹了C語言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09關(guān)于Qt添加opencv和libtorch庫的問題
這篇文章主要介紹了Qt添加opencv和libtorch庫的相關(guān)知識,兩種方法一種是通過手動添加,一種是通過qt creator添加,需要的朋友可以參考下2022-01-01