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

【C#基礎知識】之常用的幾種排序方法總結

編輯:C#入門知識

編程中經典的排序方法(即算法)分為以下幾種:
1:插入排序: a.直接插入排序  b.希爾排序
2:交換排序:a.冒泡排序      b.快速排序
3:選擇排序:直接選擇排序
4:歸並排序 :.歸並排序
5:分配排序 :a.箱排序        b.基數排序
其中常用的三種排序:1.直接選擇排序 2.直接插入排序 3.冒泡排序;


第一種:冒泡排序
 原理:對一個數列,我們將它進行輪循和交換,每次輪循出最大數或最小數放在對尾,依次進行循環,輪循長度為-1。

一、冒泡排序:讓數組中的元素兩兩比較(第i個與第i+1個比較),經過n(i-1)遍兩兩比較,數組中的元素按照我們預期的規律排序。要從大到小排序,我們進行兩兩比較的時候用。
例如:10,20,30,40,50,60,70 原始數據7個元素
20,30,40,50,60,70,10  第1趟  比較6次
30,40,50,60,70,20,10  第2趟  比較5次
40,50,60,70,30,20,10  第3趟  比較4次
50,60,70,40,30,20,10  第4趟  比較3次
60,70,50,40,30,20,10  第5趟  比較2次
70,60,50,40,30,20,10  第6趟  比較1次
也就是n個數需要排n-1趟;第t趟比較的次數為:n-t次。i=0  第一趟  i=1  第二趟  趟數:i+1  t=i+1 即可寫出一個循環:for(int j=0;j<n-t;i++)將t用i代替為:for(int j=0;j<n-i-1;i++)

【公式套用】
for(int i=0;i<numbers.length-1;i++)
{
   for(int j=0;j<numbers.length-1-i;j++)
    {
        if(numbers[j]<numbers[j+1])//從大到小排序就用"<"號;反之用">"號
          {
               借助一個中間變量進行值交換
           }
     }
}

練習:一個無序數組按從小到大順序排列


<span style="font-size:16px;">using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
namespace ConsoleApplication1 

    class Program 
    { 
        static void Main(string[] args) 
        { 
            int[] scores = { 85, 78, 88, 86, 98, 67, 48, 77, 79, 81, 83, 55, 25, 15, 5 }; 
            for (int i = 0; i < scores.Length - 1; i++) 
            { 
                for (int j = 0; j < scores.Length - 1 - i; j++) 
                { 
                    if (scores[j] < scores[j + 1])//從大到小排序就用"<"號;反之用">"號 
                    { 
                        int temp = scores[j]; 
                        scores[j] = scores[j + 1]; 
                        scores[j + 1] = temp; 
                    } 
                } 
            } 
            Console.WriteLine("從小到大依次排序結果為:"); 
            for (int i = 0; i < scores.Length; i++) 
            { 
                Console.WriteLine(scores[i]); 
            } 
            Console.ReadKey(); 
        } 
    } 
}</span> 


第二種:選擇排序
 原理:對一個數列,我們選出最大或最小的數,放在隊尾,依次循環下去,循環長度為-1;由於沒有冒泡排序那每次都要比較,因此比冒泡排序要快。


<span style="font-size:16px;">public class 選擇排序 

 private int min; 
 public void Sort(int[] arr) 
 { 
  for(int i=0;i<arr.length-1;i++) 
  { 
   min=i; 
   for(int j=i+1;j<arr.length;j++) 
   { 
    if(arr[j]<arr[min]) 
    { 
     min=j; 
    } 
   } 
   int temp=arr[min]; 
   arr[min]=arr[i];   
   arr[i]=temp; 
  } 
 } 
}</span> 

第三種:插入排序
 原理:對一個數列,我們從第二個數開始,將它與它前面的數字進行比較,每次選出最大

或最小的數放在隊首,因而形成一個有序的隊列,所以它比選擇排序更快。


<span style="font-size:16px;">public class 插入排序 

 public void Sort(int[] arr) 
 { 
  for(int i=1;i<arr.length;i++) 
  { 
   int temp=arr[i];  
   int j=i; 
   while((j>0)&&(arr(j-1)>temp)) 
   { 
    arr[j]=arr[j-1]; 
    --j; 
   } 
   arr[j]=temp; 
  } 
 } 
}</span> 

以上的三種方法是我自己平時學習時用過的,簡單、通俗易懂。代碼是學習筆記時編寫的難免會出點錯誤,請指示!

 

摘自 Anchor2011_begin的專欄

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