C語言對於給定的N各元素的陣列要求從中找出

2021-03-05 09:21:03 字數 1365 閱讀 8528

1樓:匿名使用者

有兩種方法可以實現:

1 對陣列進行從小到大排序,排序方法任意。

在排序後,陣列的第k個元素即為第k小的元素。

2 對於n值較大,k值較小的情況,1中的時間開銷偏大。

這時可以用額外的空間開銷,來換取更高的效率。

方法為:

a) 開闢一個k個元素的臨時空間m;

b) 取陣列中的第一個元素,置於m中;

c) 取第二個元素,插入到m中,保證m中是從小到大排序的;

d)對於後續n中的每個元素,均自後向前遍歷m,並插入到m對應位置中,保證m有序;

e)如果m中已經有k個元素,那麼在插入時,新元素如果比結尾元素更大,則不插入,否則插入到對應位置,原本最後一個元素拋棄;

f)當對n的遍歷結束後,儲存於m中的,就是k個n中的最小元素的有序序列。此時第k個元素,就是要求的的結果。

2樓:匿名使用者

這是根據你的程式,對程式進行了些修改,基本能夠跑通。

希望能夠幫到你

void swap(int*x,int*y);

int select(int a,int left,int right, int k)

while(a[++i]pivot&&j>=left);//多加了個判斷條件

if(i>=j)break;

swap(&a[i],&a[j]);

}if(j-left+1==k) return pivot;

//邊界情況判斷

else

}void swap(int *x,int *y)void main();

/*test*/

printf("%d \n;",select(array,0,9,5));}

c語言程式編寫:若陣列中有n個整數, 要求把下標從0到p(p小於等於n-1)的陣列元素平移到最後。

3樓:清_晨

void fun(int *w, int p, int n)for(i = 0; p+1+i < n;i++)for(j = 0;j <= p;j++)}

c語言:給定一陣列,包涵n個元素,設計功能函式,使用選擇排序法,對其進行從大到小排序

4樓:

//選擇排序演算法,按從小到大順序

void select_sort(int *arr,int n)//如果最小元素的下標不是後面n-i+1的未排序序列的第一個元素,則需要交換第i個元素和後面找到的最小元素的位置

if(k != i)}}

c語言函式呼叫求陣列各元素的階乘急

include long long int fun int x int main void for int i 0 i 7 i printf n return 0 long long int fun int x else return x fun x 1 c語言函式呼叫 求任意數階乘和!急急急急 i...

c語言,給不知道元素個數的陣列的所有元素賦相同的值

void func int a,int n a是不知道元素個數的整形陣列,n是你要賦的值 int x,i x sizeof a 2 for i 0 i此函 數可以實回現你的目的答 可以利用系統函式memset 陣列名,初值,sizeof 陣列名 來整體賦相同的初值。但是要注版意 必須在程式開權 頭引...

C語言中的陣列具有的特性是 A 所有元素具有相同的資料型別B 元素下標從1開始

a 所有元素具有相同的資料型別 正確.定義陣列形式為 type name size 每個元素的型別都是type.b 元素下標從1開始 錯誤,從0開始.c 所有元素佔用連續的記憶體 正確.陣列佔記憶體連續.從陣列名即首地址開始.d 陣列名是一個地址常量 正確.陣列名值為陣列首地址,型別為一個常量陣列指...