ポインターを使用して配列をソートする C プログラム

配列の要素を入力し、ポインターを使用して配列を並べ替える C プログラムを作成します。 C プログラミングで関数ポインターを使用して昇順または降順で配列を並べ替える方法。プログラムでポインタを使用して配列をソートするロジック。

入力

Input array elements: 10 -1 0 4 2 100 15 20 24 -5

出力

Array in ascending order: -5, -1, 0, 2, 4, 10, 15, 20, 24, 100,
Array in descending order: 100, 24, 20, 15, 10, 4, 2, 0, -1, -5,

必要な知識

基本的な C プログラミング、配列、関数、ポインター、関数ポインター

ポインタを使用して配列をソートするロジック

以下は、ポインターを使用して配列をソートする段階的な説明ロジックです。

<オール>
  • 配列のサイズと要素を入力します。 size などの変数に保存します と arr .
  • プロトタイプ int sortAscending(int * num1, int * num2) で 2 つの関数を宣言する そして int sortDescending(int * num1, int * num2) .

    どちらの関数も、2 つの要素を比較し、昇順または降順で並べ替えるために使用されます。 sortAscending() num1 の場合は負の値を返します num2 未満です 、num1 の場合は正の値 num2 より大きい 両方が等しい場合はゼロ。

    同様に、sortDescending() num1 の場合は負の値を返します num2 より大きい 、num2 の場合は正の値 num1 より大きい 両方が等しい場合はゼロ

  • プロトタイプ void sort(int * arr, int size, int (* compare)(int *, int *)) で配列をソートする別の関数を宣言します .

    3 つのパラメーターを使用します。最初のパラメーターは並べ替える配列、2 番目のパラメーターは配列のサイズ、3 番目のパラメーターは関数ポインターです。

    注: ここで渡される関数ポインタは、ソートされる 2 つの要素間の関係を決定します。要素を昇順に並べ替えたい場合は、sortAscending() の参照を渡します 関数、それ以外の場合 sortDescending() 関数。

    配列をソートするために、基本的なソートアルゴリズムを使用しました。このアルゴリズムは、他の最新の並べ替えアルゴリズムと比較すると効率的ではありませんが、理解しやすく使いやすいです。

  • ポインタを使用して配列をソートするプログラム

    /**
     * C program to sort an array using pointers.
     */
    
    #include <stdio.h>
    
    #define MAX_SIZE 100
    
    
    /* Function declaration */
    void inputArray(int * arr, int size);
    void printArray(int * arr, int size);
    
    /* Sort function declaration */
    int sortAscending(int * num1, int * num2);
    int sortDescending(int * num1, int * num2);
    
    void sort(int * arr, int size, int (* compare)(int *, int *));
    
    
    
    int main()
    {
        int arr[MAX_SIZE];
        int size;
    
        /*
         * Input array size and elements.
         */
        printf("Enter array size: ");
        scanf("%d", &size);
        printf("Enter elements in array: ");
        inputArray(arr, size);
    
    
        printf("\n\nElements before sorting: ");
        printArray(arr, size);
    
    
        // Sort and print sorted array in ascending order.
        printf("\n\nArray in ascending order: ");
        sort(arr, size, sortAscending);
        printArray(arr, size);
    
    
        // Sort and print sorted array in descending order.
        printf("\nArray in descending order: ");
        sort(arr, size, sortDescending);
        printArray(arr, size);
    
        
        return 0;
    }
    
    
    
    /**
     * Function to take input in array elements.
     * 
     * @arr     Array to store input.
     * @size    Size of the array.
     */
    void inputArray(int * arr, int size)
    {
        // Pointer to last element of array
        int * arrEnd = (arr + size - 1);
    
    
        // (arr++) Input in current array element and move to next element.
        // Till last array element (arr <= arrEnd)
        while(arr <= arrEnd)
            scanf("%d", arr++);
    }
    
    
    
    
    /**
     * Function to print all array elements.
     * 
     * @arr     Array to print.
     * @size    Size of the array.
     */
    void printArray(int * arr, int size)
    {
        // Pointer to last element of array
        int * arrEnd = (arr + size - 1);
    
    
        // *(arr++) Print current array element and move to next element.
        // Till last array element (arr <= arrEnd)
        while(arr <= arrEnd)
            printf("%d, ", *(arr++));
    }
    
    
    
    /**
     * Function to compare two succesive elements.
     * The function returns difference of first and second integer.
     * 
     * @num1    First integer to compare.
     * @num2    Second integer to compare.
     *
     * @return  Difference of num1 and num2.
     */
    int sortAscending(int * num1, int * num2)
    {
        return (*num1) - (*num2);
    }
    
    
    
    /**
     * Function to compare two successive elements. 
     * The function returns difference of second and first parameter.
     *
     * @num1    First integer to compare.
     * @num2    Second integer to compare.
     *
     * @return  Difference of num2 and num1.  
     */
    int sortDescending(int * num1, int * num2)
    {
        return (*num2) - (*num1);
    }
    
    
    
    /**
     * Function to sort an array in ascending or descending order.
     * This function is used to sort array in both order ascending or
     * descending.
     *
     * @arr     Array to sort.
     * @size    Size of the array.
     * @compare Function pointer returning integer and takes two int * 
     *          parameter. The function is called to get arrangement of
     *          two successive array elements.
     */
    void sort(int * arr, int size, int (* compare)(int *, int *))
    {
        // Pointer to last array element
        int * arrEnd  = (arr + size - 1);
    
        // Pointer to current array element
        int * curElem = arr;
        int * elemToSort;
    
    
        // Iterate over each array element
        while(curElem <= arrEnd)
        {
            elemToSort = curElem;
    
    
            // Compare each successive elements with current element
            // for proper order.
            while(elemToSort <= arrEnd)
            {
                /*
                 * Compare if elements are arranged in order 
                 * or not. If elements are not arranged in order
                 * then swap them.
                 */
                if(compare(curElem, elemToSort) > 0)
                {
                    *curElem    ^= *elemToSort;
                    *elemToSort ^= *curElem;
                    *curElem    ^= *elemToSort;
                }
    
                elemToSort++;
            }
    
            // Move current element to next element in array.
            curElem++;
        }
    }

    出力

    Enter array size: 10
    Enter elements in array: 10 -1 0 4 2 100 15 20 24 -5
    
    
    Elements before sorting: 10, -1, 0, 4, 2, 100, 15, 20, 24, -5,
    
    Array in ascending order: -5, -1, 0, 2, 4, 10, 15, 20, 24, 100,
    Array in descending order: 100, 24, 20, 15, 10, 4, 2, 0, -1, -5,

    おすすめの投稿

    • 配列と行列のプログラミング演習のインデックス
    • ポインタを使用して 2 つの数値を交換する C プログラム
    • ポインタを使用して配列要素を入力および出力する C プログラム
    • ポインターを使用してある配列を別の配列にコピーする C プログラム
    • ポインタを使用して 2 つの配列を交換する C プログラム
    • ポインターを使用して配列を反転する C プログラム
    • ポインターを使用して配列内の要素を検索する C プログラム