C語言打印柱形圖及排序過程演示


我們今天來學習一個把數組元素打印成柱形圖的技巧,結果如下:

                005 
            004 ### 
        003 ### ### 
    002 ### ### ### 
001 ### ### ### ### 
jack@alchemy:~/C$ 

思考過程

如果我們把一個數組的每個元素用柱形圖的方式打印出來,里面的各個元素是

1, 2, 3, 4, 5

我們有一個平面直角坐標系,那么、坐標系里面的某個點的縱坐標意義就是這個點在某條垂直於y軸的直線上

一圖勝千言:

所以,我們可以用一個循環來表示y軸

for (int i = 20; i > 0; --i)

這個東西看起來就像是一個長度只有20個長度的y軸

當我們的數據大於等於這個y軸坐標的時候,我們的柱形圖就應該“存在”了。(這里我找不到更好的表述)

下面我們來看

代碼

int print_array(int *array, int size)
{
        system("clear");
        for (int i = 20; i > 0; --i) { // 外循環是y軸
                for (int j = 0; j < size; j++) { // 遍歷訪問每一個數組元素
                        // 如果數組元素大於或者等於當前y軸坐標
                        if (array[j] == i) 
                        {
                                printf("%03d", i);
                        }
                        else if (array[j] > i){
                                printf("###");
                        }
                        else 
                                printf("   ");
                        // 處理完一個元素之后,打印一個空格來隔開。
                        printf(" ");
                }
                putchar('\n');
        }

        return 0;

}

執行結果

                005 
            004 ### 
        003 ### ### 
    002 ### ### ### 
001 ### ### ### ### 
jack@alchemy:~/C$ 

結合排序算法

結合冒泡排序算法

在每一次交換之后,我們進行一次屏幕的清空(windows下面可以用CLS命令, linux下面可以用clear命令),然后再進行數組的打印。

代碼

int bubble_print(int *a, int size)
{
        int i = 0, j = 0;
        int changed = 0;
        for (i = 0; i < size-1; ++i) // i表示着倒數第幾個位置成為最大(小)值, 
        {
                changed = 0;
                for(j = 0; j < size-i; ++j) // 因為i這個計數是從0開始的,i的最大值小於數據長度-1,j就能走到倒數數據長度-1個位置, 也就是j能走到正數第二個位置
                // 隨着i的值的變大,j走的范圍在減小
                {
                    if (a[j] > a[j+1]) // 這里我們想要一個升序的結果,如果前面的比后面的大,就交換數據
                    {
                        int tmp = a[j];
                        a[j] = a[j+1];
                        a[j+1] = tmp;
                        changed = 1;

                    }
                        print_array(a, size); // 在這里進行了打印
                        usleep(300000);
                }
                        if (!changed) {
                                break;
                        }

        }
        return 0;

}

效果

請讀者自己去嘗試一下快排的演示

這里是快排效果

總結

流程控制其實就可以控制很多自然的東西。 編程雖然是數學計算,但不僅僅是數學計算


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM