1.氣泡排序
第一層迴圈
氣泡排序第一層迴圈的含義為:需要遍歷多次陣列,才能將這個陣列排好序,
第一次遍歷,確定乙個最值。
第二次遍歷,確定第二個最值。
。。。 第
len-1
次遍歷,確定第
len-1
最值。len-1
個最值都確定了,自然整個陣列也就排好序了。
因此,第一層迴圈含義為:需要遍歷len-1次數組,才能將陣列排好序。
第二層迴圈
通常定義為
int j; j
是乙個與
i相關的變數,第
2層迴圈需要用到第一層的
i的值。
那第二層迴圈要解決的問題是什麼?
不好想的話,我們反過來想,在第二層迴圈時,我們還要對已經排好序的位置進行遍歷嗎?
當然不需要作此無用功,在第二層遍歷中,我們只需對未排好序的那些待排位置進行遍歷即可,而首先,我們必須知道,哪些元素是已經拍過序的,哪些元素是待排序的。
所以,我們第二層迴圈要解決的問題便是:待排序區域的起始和結尾位置。
而要解決這個問題,
首先,第乙個要解決的便是:在進行這個迴圈時,陣列已經排好了幾個值。
其次,第二個要解決的便是:在陣列中,待排序區域的其實和末尾位置分別是什麼。
第乙個要解決的問題與第一層迴圈已經進行了多少次有關。
第二個要解決的問題則與排序時遍歷的方向有關。
#include
int main()
;int len=sizeof(a)/sizeof(int);
int i,j;
for(i=0;i第
len-1
次遍歷,確定第
len-1最值
}for(j=0;j<10;j++)
printf("\n");
}return 0;
}2.選擇排序
選擇排序也是一種簡單直觀的排序演算法。它的工作原理很容易理解:初始時在序列中找到最小(大)元素,放到序列的起始位置作為已排序序列;然後,再從剩餘未排序元素中繼續尋找最小(大)元素,放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
注意選擇排序與氣泡排序的區別:氣泡排序通過依次交換相鄰兩個順序不合法的元素位置,從而將當前最小(大)元素放到合適的位置;而選擇排序每遍歷一次都記住了當前最小(大)元素的位置,最後僅需一次交換操作即可將其放到合適的位置。
#include
int main ()
;int len=sizeof(a)/sizeof(int);
int i,j;
int min;
for(i=0;i
} //放到已排序序列的末尾(即交換),該操作很有可能把穩定性打亂,所以選擇排序是不穩定的排序演算法
if (min != i)
for(j=0;j<10;j++)
printf("\n");
}
重溫演算法Day8 插入排序與氣泡排序
原地排序 空間複雜度是 o 1 的排序演算法。氣泡排序 對相鄰的兩個元素進行比較,是否滿 換。一次冒泡會讓至少乙個元素移動到它應該在的位置,重複 n 次,就完成了 n 個資料的排序工作。插入排序 往乙個有序的陣列裡插入乙個新的資料,插入到應該在位置,繼續保持陣列有序。陣列中分為已排序的區間和未排序的...
排序 氣泡排序與選擇排序
最近複習大學學過的演算法,這裡做個筆記。排序,我們學過 這裡需要了解什麼是時間複雜度,什麼是空間複雜度。簡單而言,時間複雜度指執行的次數,空間複雜度指消耗的記憶體。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。走訪元素的工作是重複地...
選擇排序與氣泡排序
今早心血來潮,又想看看氣泡排序.於是乎度娘一番,找到了度娘給我的這篇文章,前面的文字描述還是簡單易懂的,可惜給出的 示範有些文不對題.於是乎又wiki一番.發現上文給出的 形似選擇排序,於是總結如下 我們假設有乙個陣列 624159 對應的索引也就是 0 5,如果我想描述第二個位置,也就是數字2的位...