1. 程式人生 > >排序算法中的冒泡排序法

排序算法中的冒泡排序法

con 整除 sum 完成 經典的 pri 遍歷 結束 ++

遍歷 — 樣本篩選

有的時候,樣本範圍內的數據可能不是每一個我們都需要,而是只需要其中一部分,那麽在遍歷樣本時,就需要對取出的每一個樣本數據進行判斷,看是否滿足我們的需要,也就是要對樣本進行篩選。

比如,輸出1-10之間所有的奇數,雖然樣本範圍是1-10,但不是每一個樣本數據都是我們需要的,因此,我需要對取出的每一個數據進行驗證,看它是不是奇數,如果是,才輸出。

可以使用下面的代碼來完成輸出1-10之間所有的奇數:

for (int i = 1; i <= 10; i++)
{
// 每一次進入循環體,i,就是取出的其中一個樣本數據
// 判斷該數據是不是奇數
if (i % 2 !=
0)
{
Console.Write(i);// 該樣本數據滿足條件,輸出
}
}

運行結果為:

13579

遍歷 — 樣本求和

有的時候,我們需要把樣本範圍內的所有數字相加,這就是求和問題。

面對求和的問題,可以使用這樣的思路:在遍歷之前,先準備好一個變量,值為0,然後取出樣本的第一個數據,將變量的數據和第一個數據相加,然後再保存到變量中。然後對樣本剩下的數據做同樣的處理即可。

舉個例子,比如讓你對10-15之間的所有數字求和,可以使用如下的方案:

第一步:準備好一個變量,比如sum,讓它的值為0

  • sum = 0;

第二步:將樣本範圍內的每一個數和變量sum中保存的值累加,然後再保存到sum中:

  • sum += 10; // sum:10
  • sum += 11; // sum: 21
  • sum += 12; // sum: 33
  • sum += 13; // sum: 46
  • sum += 14; // sum: 60
  • sum += 15; // sum: 75

第三步:當遍歷結束後,變量sum中的值就是累加求和的結果。

把上面的例子轉換為代碼如下:

//第一步
int sum = 0;
//第二步
for (int i = 10; i <= 15; i++)
{
sum += i;
}
//第三步
Console.Write("和為:" + sum);

輸出結果如下:

和為:75

這就是求和問題的做法,類似的累計問題也是同樣的方案,比如求10-15之間所有數的乘積,可以使用下面的代碼:

//第一步
int sum = 1; // 求乘積要從1開始
//第二步
for (int i = 10; i <= 15; i++)
{
sum *= i; // 使用累乘
}
//第三步
Console.Write("積為:" + sum);

運行結果為:

積為:3603600

遍歷 — 樣本計數

樣本計數問題往往會和樣本篩選問題合並使用。

它是指這麽一種場景,有一個樣本範圍,需要計算該樣本範圍中滿足條件的樣本數據有多少個。

比如,55-66中有多少個數能同時被2和3整除。

可以使用如下的思路解決:

第一步,準備好一個變量num,該變量表示滿足要求的樣本數據數量,一開始的值為0。

  • int num = 0;

第二步,遍歷樣本,一個一個將樣本數據拿出來,看看該樣本數據是否滿足要求,如果滿足,將計數變量num自增1。

  • 55 不滿足要求,什麽也不做
  • 56 不滿足要求,什麽也不做
  • 57 不滿足要求,什麽也不做
  • 58 不滿足要求,什麽也不做
  • 59 不滿足要求,什麽也不做
  • 60 滿足要求,num++ // num: 1
  • 61 不滿足要求,什麽也不做
  • 62 不滿足要求,什麽也不做
  • 63 不滿足要求,什麽也不做
  • 64 不滿足要求,什麽也不做
  • 65 不滿足要求,什麽也不做
  • 66 滿足要求,num++ // num: 2

第三步,當遍歷結束後,變量num中的值就是計數的結果。

把上面的例子轉換為代碼如下:

//第一步
int num = 0; // num表示計數的結果,在一開始,計數之前,為0
//第二步
for (int i = 55; i <= 66; i++)
{
if (i % 2 == 0 && i % 3 == 0)
{
num++;
}
}
//第三步
Console.Write("55-66中,共有" + num + "個數能同時整除2和3");

運行結果如下:

55-66中,共有2個數能同時整除2和3

計數問題有一個經典的場景,就是判斷一個數是不是質數(素數)

什麽是質數(素數)?質數(素數)是一個大於等於2的數,該數只能被1和自身整除。

這看上去不像是一個計數場景,甚至不像是任何一個遍歷場景。

既然質數只能被1和自身整除,換句話說,在1到該數之間,一定只有兩個數能整除該數。比如,7是一個質數,因為1-7之間,只有兩個數(1和7)能整除它

仔細理解上面這段話,如果你理解了,就會發現這是一個什麽問題?沒錯,這就是一個計數問題。

我們要判斷一個數n是不是質數,只需要看1-n之間有多少個數能整除n,如果數目為2,它就是質數,否則,它就不是。

於是,可以使用下面的代碼來判斷:

int n = 3311; // 待判斷的數n,假設它的值是3311

//下面是計數問題的代碼
//第一步
int num = 0; //計數
//第二步,遍歷範圍1-n
for (int i = 1; i <= n; i++)
{
if (n % i == 0)
{
num++;//計數+1
}
}
//第三步,根據計數結果來判斷
if (num == 2)
{
Console.Write(n + "是一個質數");
}
else
{
Console.Write(n + "不是一個質數");
}

執行結果:

3311不是一個質數

排序算法中的冒泡排序法