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

Visual C# 诠釋常用排序算法

編輯:C#基礎知識

  前段時間因為項目需要,做了個用來對數組排序的類,順便把以前學過的幾種排序算法用C#實現一下。用C#的一些機制來诠釋了一下算法的是實現。在閱讀本之前,需要一些對C#的有些基本的了解,了解方法參數中out ,ref的作用,掌握面向對象的一些基本思想。

  1. 插入排序

  1.1. 基本思想:

  每次將一個待排序的數據元素,插入到前面已經排好序的數列中的適當位置,使數列依然有序;直到待排序數據元素全部插入完為止。

  1.2. 排序過程: 

  【示例】:

  [初始關鍵字] [49] 38 65 97 76 13 27 49

  (38) [38 49] 65 97 76 13 27 49

  (65) [38 49 65] 97 76 13 27 49

  (97) [38 49 65 97] 76 13 27 49

  (76) [38 49 65 76 97] 13 27 49

  (13) [13 38 49 65 76 97] 27 49

  (27) [13 27 38 49 65 76 97] 49

  (49) [13 27 38 49 49 65 76 97]

  1.3. 程序實現

<summary>
/// 插入排序算法
/// </summary>
/// <param name="dblArray"></param>
static void InsertSort(ref double[] dblArray)
{
 for(int i = 1 ; i < dblArray.Length ; i++)
 {
  int frontArrayIndex = i-1 ;
  int CurrentChangeIndex = i ;
  while(frontArrayIndex>=0)
  {
   if(dblArray[CurrentChangeIndex] < dblArray[frontArrayIndex])
   {
    ChangeValue(ref dblArray[CurrentChangeIndex],ref dblArray[frontArrayIndex]);
    CurrentChangeIndex = frontArrayIndex ;
   }
   frontArrayIndex--;
  }
 }
}
/// <summary>
/// 在內存中交換兩個數字的值
/// </summary>
/// <param name="A"></param>
/// <param name="B"></param>
static void ChangeValue (ref double A ,ref double B)
{
 double Temp = A ;
 A = B ;
 B = Temp ;
}

  2. 選擇排序

  2.1. 基本思想:

  每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。

  2.2. 排序過程:

  【示例】:

  初始關鍵字 [49 38 65 97 76 13 27 49]

  第一趟排序後 13 [38 65 97 76 49 27 49]

  第二趟排序後 13 27 [65 97 76 49 38 49]

  第三趟排序後 13 27 38 [97 76 49 65 49]

  第四趟排序後 13 27 38 49 [49 97 65 76]

  第五趟排序後 13 27 38 49 49 [97 97 76]

  第六趟排序後 13 27 38 49 49 76 [76 97]

  第七趟排序後 13 27 38 49 49 76 76 [ 97]

  最後排序結果 13 27 38 49 49 76 76 97

  2.3. 程序實現

/// <summary>
/// 選擇排序
/// </summary>
/// <param name="dblArray"></param>
private static void SelectSort(ref double[] dblArray)
{
 for(int i =0 ; i< dblArray.Length; i++)
 {
  double MinValue = dblArray[i] ;
  int MinValueIndex = i ;
  for(int j = i; j< dblArray.Length; j++)
  {
   if(MinValue > dblArray[j] )
   {
    MinValue = dblArray[j] ;
    MinValueIndex = j ;
   }
  }
  ExChangeValue(ref dblArray[i], ref dblArray[MinValueIndex]);
 }
}
/// <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 ;
}

  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

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 下一頁
  • 尾頁
  • 共3頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved