C說話冒泡排序法心得。本站提示廣大學習愛好者:(C說話冒泡排序法心得)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話冒泡排序法心得正文
記得之前在年夜學裡進修c說話的時刻,剛開端是很費勁的.
入門級其余算法中有個叫冒泡排序法,也有稱為氣泡排序法.那時刻剛接觸它就對它的名字特殊感興致,由於認為很成心思.好了,空話不多說了,我們先一路簡略回想下這個冒泡排序法.
一.打印行和列普通是如許的一個簡略代碼,輸入4行4列*:
for(int i = 1,i < 5,i++){ for(int j = 1,j < 5,j++){ printf("*"); } printf("n\"); }
二.打印"上三角":
for(int i = 1,i < 5,i++){ for(int j = 1,j < i,j++){ printf("*"); } printf("n\"); }
三.打印"下三角":
for(int i = 1,i < 5,i++){ for(int j = i,j < 5,j++){ printf("*"); } printf("n\"); }
四.看官莫急,症結的處所等會就來了.冒泡排序其實就是一個"下三角"打印道理,由於在一個數組中排序每次都是從第一個元素開端和前面的元素比一輪,肯定一個最值,最值就"沉"到最初一個了,每輪比擬都邑少一個數,所以冒泡排序道理就要用到打印"下三角道理了":
for (int i = 0; i < 4; i++) { for (int j = i; j < 4; j++) { if (nums[j] < nums[j+1]) { int temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } }
仔細的同伙應當會發明,如許排序一個數組後成果其實不會預期的成果,可是我明明用的是"打印下三角"啊!記適合時先生給我們如許一個功課,讓年夜家歸去想一想,提醒用"下三角"道理打印,其時感到好坑爹啊!(所以對這個冒泡排序法印象到如今還印象挺深的)
五.是的,這個是有一些小細節的,我其時揣摩了好一陣,後來終究發明了成績了,是由於下一輪每次比擬都要從最後面的數開端與前面的數比擬,假如轉變初始化的值,第一個數只能與第2個數比擬一次後就不會介入下一輪的比擬了.所以我們應當把這個換一種情勢
for (int i = 0; i < 4; i++) { for (int j = 0; j < 4-i; j++) { if (nums[j] < nums[j+1]) { int temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } }
六.哈哈,道理是不錯的,換了一種情勢後就輸入沒成績了.
七.彌補一點,普通都回把4調換為一個變量,好比length,或許應用宏界說的辦法,小我感到宏界說更好點. 當應用length的時刻,要把length-1,如許有一個利益,就是避免越界成績,並且排序比年夜小的時刻最初一個剩下的原來也不消去比擬.所以length-1是沒成績的.