几种常用的C#排序方法简介

这五种C#排序方法,其实在其他语言平台中也是常见的,因此C#排序方法也可以说是其他语言的排序方法,只不过实现的语言不同罢了。

在网上看到很多经典排序方法,算法分:

1:插入排序 a.直接插入排序  b.希尔排序

2:交换排序 a.冒泡排序      b.快速排序

3:选择排序 a.直接选择排序

4:归并排序 a.归并排序

5:分配排序 a.箱排序        b.基数排序

本人常用的三种C#排序方法:1.直接选择排序 2.直接插入排序 3.冒泡排序;我用C#语言来讲解一下。

第一种:冒泡排序

原理:对一个数列,我们将它进行轮循和交换,每次轮循出最大数或最小数放在对尾,依次进行循环,轮循长度为-1。

public  class EbullitionSorter  {    public  void Sort( int[] arr)   {     for( int i=arr.length-1;i>0;i--)    {      for( int j=0;j   {       if(arr[i]    {        int temp=arr[i];       arr[i]=arr[j];       arr[j]=temp;      }     }    }   }  } 

第二种:选择排序

原理:对一个数列,我们选出最大或最小的数,放在队尾,依次循环下去,循环长度为-1;由于没有冒泡排序那每次都要比较,因此比冒泡排序要快。

public  class SelectionSorter  {    private  int min;    public  void Sort( int[] arr)   {     for( int i=0;i  {     min=i;      for( int j=i+1;j   {       if(arr[j]    {       min=j;      }     }      int temp=arr[min];     arr[min]=arr[i];       arr[i]=temp;    }   }  } 

第三种:插入排序

原理:对一个数列,我们从第二个数开始,将它与它前面的数字进行比较,每次选出最大

或最小的数放在队首,因而形成一个有序的队列,所以它比选择排序更快。

public  class InsertionSorter  {    public  void Sort( int[] arr)   {     for( int i=1;i  {      int temp=arr[i];       int j=i;      while((j>0)&&(arr(j-1)>temp))     {      arr[j]=arr[j-1];      --j;     }     arr[j]=temp;    }   }  } 

以上的三种方法是我自己常用的,很简单,程序也很容易懂的,对初学者很有帮助。

很多人学过面向对象思想,下次就写下怎么对对象排序。

以上有错的地方请谅解!!

以下是C#实现的几种常见排序算法示例: 1. 冒泡排序 ```csharp static void BubbleSort(int[] arr) { int len = arr.Length; for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` 2. 选择排序 ```csharp static void SelectionSort(int[] arr) { int len = arr.Length; for (int i = 0; i < len - 1; i++) { int minIndex = i; for (int j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } if (minIndex != i) { int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } } ``` 3. 插入排序 ```csharp static void InsertionSort(int[] arr) { int len = arr.Length; for (int i = 1; i < len; i++) { int temp = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > temp) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = temp; } } ``` 4. 快速排序 ```csharp static void QuickSort(int[] arr, int left, int right) { if (left < right) { int pivot = Partition(arr, left, right); QuickSort(arr, left, pivot - 1); QuickSort(arr, pivot + 1, right); } } static int Partition(int[] arr, int left, int right) { int pivot = arr[right]; int i = left - 1; for (int j = left; j < right; j++) { if (arr[j] < pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp2 = arr[i + 1]; arr[i + 1] = arr[right]; arr[right] = temp2; return i + 1; } ``` 5. 归并排序 ```csharp static void MergeSort(int[] arr, int left, int right) { if (left < right) { int mid = (left + right) / 2; MergeSort(arr, left, mid); MergeSort(arr, mid + 1, right); Merge(arr, left, mid, right); } } static void Merge(int[] arr, int left, int mid, int right) { int[] temp = new int[right - left + 1]; int i = left; int j = mid + 1; int k = 0; while (i <= mid && j <= right) { if (arr[i] < arr[j]) { temp[k++] = arr[i++]; } else { temp[k++] = arr[j++]; } } while (i <= mid) { temp[k++] = arr[i++]; } while (j <= right) { temp[k++] = arr[j++]; } for (int m = 0; m < temp.Length; m++) { arr[left + m] = temp[m]; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值