【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的专栏
补充:软件开发 , C# ,