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)}} 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... void func int a,int n a是不知道元素個數的整形陣列,n是你要賦的值 int x,i x sizeof a 2 for i 0 i此函 數可以實回現你的目的答 可以利用系統函式memset 陣列名,初值,sizeof 陣列名 來整體賦相同的初值。但是要注版意 必須在程式開權 頭引... a 所有元素具有相同的資料型別 正確.定義陣列形式為 type name size 每個元素的型別都是type.b 元素下標從1開始 錯誤,從0開始.c 所有元素佔用連續的記憶體 正確.陣列佔記憶體連續.從陣列名即首地址開始.d 陣列名是一個地址常量 正確.陣列名值為陣列首地址,型別為一個常量陣列指...c語言函式呼叫求陣列各元素的階乘急
c語言,給不知道元素個數的陣列的所有元素賦相同的值
C語言中的陣列具有的特性是 A 所有元素具有相同的資料型別B 元素下標從1開始