2017-04-03 16 views
1

如果我有5個數組和一個包含所有5個數組的指針數組,並且我需要編寫一個函數來僅使用指針數組對一個數組進行排序,那麼我可以這樣做嗎?在一個函數中排序5個數組

的函數需要數組從指數1(!)開始,每一個不爲0。

int arr1[] = { 3, 9, 6, 7 }; 
int arr2[] = { 2, 5, 5 }; 
int arr3[] = { 0 }; 
int arr4[] = { 1, 6 }; 
int arr5[] = { 4, 5, 6, 2, 1 }; 
int * parr[] = { arr1, arr2, arr3, arr4, arr5 }; 

我知道如何排序一個數組進行排序,但我有點失去了當我試圖以最有效的方式使用指針數組對每一個數組進行排序。也許有一個選項來排序每個數組,但在一個循環?因爲對於陣列中的每一個做整個「for」循環似乎有點奇怪

注意每個數組的第一個元素指示每個數組的大小。例如:在arr1[0]中是3,因此在該數組中索引0之後的數字量爲3(9,6,7)。

+1

'空隙multi_sort(爲size_t N,INT *帕爾[N]){對於(爲size_t I = 0; I BLUEPIXY

+0

你有沒有人爲的限制只使用指針數組「以最有效的方式」?即不允許其他變量的創建?是否允許調用庫函數?可以覆蓋指向未被排序的數組0的指針嗎?你的經驗水平是什麼?即是建議使用循環一個新的想法給你?總之,如果有任何非明顯的要求,請解釋它們。你可以顯示你的代碼來排序一個數組嗎?即「你試過了什麼?」。 – Yunnosch

+0

請[編輯]你的問題,以顯示[你迄今爲止嘗試過的](http://whathaveyoutried.com)。您應該包含您遇到問題的代碼[mcve],然後我們可以嘗試幫助解決特定問題。你還應該閱讀[問]。 –

回答

2

對於數組parr的每個元素,您可以調用循環標準C函數qsort

例如

#include <stdio.h> 
#include <stdlib.h> 

int cmp(const void *a, const void *b) 
{ 
    return (*(const int *)b < *(const int *)a) - 
      (*(const int *)a < *(const int *)b); 
}   

int main(void) 
{ 
    int arr1[] = { 3, 9, 6, 7 }; 
    int arr2[] = { 2, 5, 5 }; 
    int arr3[] = { 0 }; 
    int arr4[] = { 1, 6 }; 
    int arr5[] = { 4, 5, 6, 2, 1 }; 
    int * parr[] = { arr1, arr2, arr3, arr4, arr5 }; 

    const size_t N = sizeof(parr)/sizeof(*parr); 

    for (size_t i = 0; i < N; i++) 
    { 
     qsort(parr[i] + 1, parr[i][0], sizeof(int), cmp); 
    } 

    for (size_t i = 0; i < N; i++) 
    { 
     for (size_t j = 0; j < parr[i][0] + 1; j++) 
     { 
      printf("%d ", parr[i][j]); 
     } 
     putchar('\n'); 
    } 

    return 0; 
} 

程序輸出是

3 6 7 9 
2 5 5 
0 
1 6 
4 1 2 5 6 
+0

'該函數需要對從索引1(!)開始並且不是0的數組中的每一個進行排序。「 - 您失敗了:D – kaldoran

+0

@kaldoran看起來您無法理解所示的演示程序。 –

+0

我認爲你在這裏贏了,我已經重讀了代碼和問題,我的不好。 [順便說一句,剛開始時應該是個笑話] – kaldoran