我被要求制作一個函式來交換陣列中的兩個部分。
像這樣的東西,
array[] = {1 , 2, 5, 7, 8, a , b, c}
| |
sections: First Second
簽名是void reverse_reg(int *arr, int s, int k, int j)哪里arr是陣列,s是第一部分的第一個索引,是第一部分k的最后一個索引,j表示第二部分的結束,開始是k(因為在C 中索引從0開始)
到目前為止,我有這樣的事情,
void reverse_reg(int *arr, int s, int k, int j)
{
for (int i = s; i < j; i )
{
if (i > k / 2) /* swap the rest */
{
swap(&arr[i], &arr[j - i 1]); /* this is wrong */
}
else
{
swap(&arr[i], &arr[k i 1]);
}
}
}
我已經測驗了這個else塊,到目前為止它成功地交換了第二部分,生產,
result:
a b c 7 8 1 2 5
盡管如此,我一直無法找到交換第二部分的方法,因為該if塊產生了完全錯誤的東西(這是有道理的),這讓我認為最初的邏輯是錯誤的。任何提示?
如果有幫助,我呼叫函式的方式是, reverse_reg(arr, 0, 4, 8);
結果陣列應該是:
result:
a b c 1 2 5 7 8
uj5u.com熱心網友回復:
正如@EugeneSh. 所指出的,一種簡單的方法是反轉每個部分,然后反轉整個陣列。它可以很簡單:
void swap(int* i, int* j) {
int k = *i;
*i = *j;
*j = k;
}
void reverse(int arr[], int len) {
for (int i = 0; i < len / 2; i ) {
swap(arr i, arr len - i - 1);
}
}
void reverse_reg(int* arr, int s, int k, int j) {
// you use last index of initial section while I need index of second one
k;
reverse(arr s, k - s);
reverse(arr k, j - k);
reverse(arr s, j - s);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/346630.html
下一篇:如何在不使用for回圈的情況下創建一個新串列,其中new_array[i][j]=b[a[i][j]](a是一個陣列和ba向量)
