总体上讲排序有以下五种:以身边常见的扑克牌为例来理解比较容易些。

插入排序:(基本思想)每一趟将一个待排序的记录,按照其关键字大小插入到已经安排好的一组记录的适当位置上,直到所有待排序记录全部插入为止。例如 希尔(shell)排序

                (举例)打扑克牌在抓牌时要保证抓过的牌有序排列,则每抓一张牌,就插入到合适的位置,直到抓完牌为止,即可得到一个有序序列。

交换排序:(基本思想)两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时则进行交换,直到整个序列全部满足要求为止。例如 冒泡排序和快速排序

选择排序:(基本思想)每一趟从待排的记录中选出关键字的记录,按顺序放在已排序的记录序列的最后,直到全部排完为止。例如 堆排序

归并排序:(基本思想)将两个或两个以上的有序表合并成一个有序表的过程。

基数排序:(基本思想)和前面所述各类比较方法完全不同的一种排序方法。前面各类排序方法都是建立在关键字比较的基础上,而基数排序不比较关键字中各位的值,通过对待排序记录进行若干趟“分配”和“收集”来实现排序的。

  • 冒泡排序
  • 快速排序
  • Shell排序
  • 堆排序

交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。

1.冒泡排序-BubbleSorting  

 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。 

  排序算法(待续)

下面这个动画斜过来气泡往上走会更直观:

排序算法(待续)

方法A:(比较直白、跟算法思想很贴切)  第一遍是数组的第一个元素跟第二个比较,第二个元素跟第三个元素比较。。。最终把最小的放到第一个位置;第二遍是数组的第二个元素跟第三个比较,第三个元素跟第四个比较。。。最终把次小的放到第二个位置,。。。以此类推。。。每一遍都是相邻两个元素比较。

 1 using System;
 2 
 3 namespace SortFunction
 4 {
 5     class BubbleSort
 6     {
 7         static void Main(string[] args)
 8         {
 9             int[] a = { 10, 1, 2, 3, 4, 9 };
10             BubbleSort BS = new BubbleSort();
11             int[] b = BS.sortArray(a);
12             for (int i = 0; i < b.Length; i++)
13             {
14                 Console.WriteLine(b[i]);
15             }
16             Console.ReadLine();
17         }
18 
19         int[] sortArray(int[] inputArray)
20         {
21             for (int i = 0; i < inputArray.Length; i++)
22             {
23                 // exchange can speed up the sorting in specail occasion.
24                 bool exchange = false;
25                 for (int j = i; j < inputArray.Length - 1; j++)
26                 {
27                     if (inputArray[j] > inputArray[j + 1])
28                     {
29                         int tmp = inputArray[j + 1];
30                         inputArray[j + 1] = inputArray[j];
31                         inputArray[j] = tmp;
32                         exchange = true;
33                     }
34                 }
35 
36                 if (!exchange)
37                 {
38                     break;
39                 }
40             }
41             return inputArray;
42         }
43     }
44 }
View Code

相关文章:

  • 2022-12-23
  • 2022-02-24
  • 2021-06-03
  • 2022-01-12
  • 2021-11-22
  • 2021-12-28
  • 2022-12-23
  • 2021-05-04
猜你喜欢
  • 2021-10-30
  • 2022-12-23
  • 2021-10-04
  • 2021-11-05
  • 2021-11-12
  • 2022-12-23
  • 2021-08-25
相关资源
相似解决方案