程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Visual C#常用排序算法(3)

Visual C#常用排序算法(3)

編輯:關於C語言

3.冒泡排序

3.1.基本思想:

兩兩比較待排序數據元素的大小,發現兩個數據元素的次序相反時即進行交換,直到沒有反序的數據元素為止。

3.2.排序過程:

設想被排序的數組R[1..N]垂直豎立,將每個數據元素看作有重量的氣泡,根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R,凡掃描到違反本原則的輕氣泡,就使其向上"漂浮",如此反復進行,直至最後任何兩個氣泡都是輕者在上,重者在下為止

【示例】:

49 13 13 13 13 13 13 13

38 49 27 27 27 27 27 27

65 38 49 38 38 38 38 38

97 65 38 49 49 49 49 49

76 97 65 49 49 49 49 49

13 76 97 65 65 65 65 65

27 27 76 97 76 76 76 76

49 49 49 76 97 97 97 97

3.3.程序實現

程序支持順序和倒序排列。

/// <summary>
/// 冒泡算法
/// </summary>
/// <param name="abarray"></param>
/// <param name="IsAscending">是否順序排序</param>
/// <returns></returns>
private static double[] BubbleArithmetic(double[] abarray ,bool IsAscending)
{
 if(abarray.Length > 0 )
 {
  for(int i = abarray.Length-1 ;i >=0 ;i--)
  {
   for(int j = i-1 ; j>=0 ; j--)
   {
    if(CheckAccordCondition(abarray[i],abarray[j],IsAscending))
    {
     ExchangeValue(ref abarray[i],ref abarray[j]);
    }
   }
  }
 }
 return abarray;
}
/// <summary>
/// 交換數據
/// </summary>
/// <param name="A"></param>
/// <param name="B"></param>
private static void ExchangeValue(ref double A , ref double B)
{
 double Temp = A ;
 A = B ;
 B = Temp ;
}
/// <summary>
/// 是否符合條件
/// </summary>
/// <returns></returns>
private static bool CheckAccordCondition(double data1 ,double data2, bool IsAscending)
{
 if(data1 > data2)
 {
  return IsAscending == true ? true :false;
 }
 else
 {
  return IsAscending == true ? false :true ;
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved