線性時間選擇排序C語言

2021-10-03 19:16:26 字數 2958 閱讀 4379

這個**是我自己靠思路寫的,問題不斷,請各位大佬,指定下,哪些地方問題很大,哪些地方可以提公升提公升

#include

#include

intfuncation

(int

*a,int p,

int q,

int k)

;int

sort

(int

* aa,

int left,

int right)

;int

* arr=

(int*)

malloc(20

*sizeof

(int))

;int

* mid=

(int*)

malloc(20

*sizeof

(int))

;int

* l=

(int*)

malloc(20

*sizeof

(int))

;int

* r=

(int*)

malloc(20

*sizeof

(int))

;void

main()

printf

("您想查第幾小的數字?");

scanf

("%d"

,&k)

;int result=

funcation

(arr,

0,len-

1,k)

;//接入自定義函式,需要陣列arr,0,len-1,k

printf

("您查詢的數為%d"

,result)

;system

("pause");

}int

funcation

(int

*a,int p,

int q,

int k)if(

(q+1)%

5!=0)

//如果模5有餘數,把最後乙個的中位數新增到中位數陣列裡最後乙個

int mm=

sort

(mid,0,

(q+1)/

5-1)

;//中位數陣列的中位數

int j=

0,n=

0,m=0;

for(

;j1;j++)if

(a[j]

>mm)}if

(k<=n)

if(k>n+1)

else

}int

sort

(int

* aa,

int left,

int right)

//快速排序部分,把中位數取出來

i= left;

j= right;

temp = aa[i]

;while

(i != j)

while

(aa[i]

<=temp && i

if(i

} aa[left]

= aa[i]

; aa[i]

= temp;

sort

(aa,left, i-1)

;sort

(aa,i+

1, right)

;}

#include

#include

int* arr=

(int*)

malloc(10

*sizeof

(int))

;int

* l=

(int*)

malloc(10

*sizeof

(int))

;int

* r=

(int*)

malloc(10

*sizeof

(int))

;int

bubble

(int

*a,int left,

int right)

;int

function

(int

* a,

int p,

int q,

int k)

;void

main()

printf

("您想查第幾小的數字?");

scanf

("%d"

,&k)

;int result=

function

(arr,

0,len-

1,k)

;//接入自定義函式,需要陣列arr,0,len-1,k

printf

("您查詢的數為%d"

,result)

;system

("pause");

}int

function

(int

* a,

int p,

int q,

int k)

//q-p+1是陣列的長度len

線性時間排序 三 C語言

給定若干字串,也就是二維陣列,字串指標之類的.如 ab,a,b.要求排序後為 a,ab,b.字母數為 n 在 o n 時間完成.這個問題,是昨天那個問題的下乙個問題.我起初的方向是錯的.後來,採用了分治的方法給予實現.關於時間的分析,每次都只對當前位置不為 nul 的字元進行排序.所以,當然就是 o...

線性期望時間選擇問題C語言

直接上 include define size 20 int main void int select int const array,const int left,const int right,const int ith int partition int const array,const i...

線性時間選擇

今天學習了線性時間選擇,主要是通過快排的方法,在乙個平均時間線性的情況下進行第k小元素的選擇,結合一道題目進行描述 題目來自演算法設計與分析就是王曉東的那本 output.txt 這題目分析一下可以得出就是尋找中位數 為什麼呢?將這些數字排列在數軸上尋找乙個到各個點距離最小的那個點,可以得知最中間的...