几种常见的排序算法

1) 冒泡排序法

  例如 数组 3,9,27,6,18,12,21,15

       第一轮:

               排序选择第一位数作为比较对象,依次比较后面的数,如果比3小就交换

      3,9,27,6,18,12,21,15   

      3,9,27,6,18,12,21,15

      3,9,27,6,18,12,21,15

      3,9,27,6,18,12,21,15

      3,9,27,6,18,12,21,15

      3,9,27,6,18,12,21,15

      3,9,27,6,18,12,21,15

       第二轮:选择第二位数作为比较对象,依次和后面的数比较

      3,9,27,6,18,12,21,15

      3,9,27,6,18,12,21,15

      3,6,27,9,18,12,21,15      9比6大则交换

      3,6,27,9,18,12,21,15

      3,6,27,9,18,12,21,15

      3,6,27,9,18,12,21,15

      3,6,27,9,18,12,21,15

  第三轮:选择第三位数作为比较对象,依次和后面的数比较

      3,6,27,9,18,12,21,15   27比9大则交换

      3,6,9,27,18,12,21,15

      3,6,9,27,18,12,21,15

      3,6,9,27,18,12,21,15

      3,6,9,27,18,12,21,15

      3,6,9,27,18,12,21,15

  第四轮:选择第四位数作为比较对象,依次和后面的数比较

      3,6,9,27,18,12,21,15    27比18大则交换

      3,6,9,18,27,12,21,15    18比12大则交换

      3,6,9,12,27,18,21,15

      3,6,9,12,27,18,21,15

  第五轮:选择第五位数作为比较对象,依次和后面的数比较

      3,6,9,12,27,18,21,15    27比18大则交换

      3,6,9,12,18,27,21,15

      3,6,9,12,18,27,21,15   18比15大则交换

      3,6,9,12,15,27,21,18

  第六轮:选择第六位数作为比较对象,依次和后面的数比较

      3,6,9,12,15,27,21,18   27比21大则交换、

      3,6,9,12,15,21,27,18   21比18大则交换

      3,6,9,12,15,18,27,21

  第七轮:选择第七位数作为比较对象,依次和后面的数比较

      3,6,9,12,15,18,27,21   27比21大则交换

      3,6,9,12,15,18,21,27

以下是代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Research
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 };  //定义一个一维数组,并赋值
14             foreach(int m in arr)           //循环遍历定义的一维数组,并输出其中的元素
15             Console.Write(m + " ");
16             Console.WriteLine();
17             int j, temp;   //定义两个int类型的变量,分别用来表示数组下表和存储新的数组元素
18             for(int i=0;i<arr.Length-1;i++)   //根据数据下标的值遍历数组元素
19             { j = i + 1;
20               id:                           //定义一个标识,以便从这里开始执行语句
21                 if (arr[i] > arr[j])        //判断前后两个数的大小
22                 {
23                     temp = arr[i];           //将比较后大的元素赋值给定义的int变量
24                     arr[i] = arr[j];         //将后一个元素的值赋值给前一个元素
25                     arr[j] = temp;           //将int变量中存储的元素值赋值给后一个元素
26                     goto id;                 //返回标识,继续判断后面的元素
27                 }
28                 else
29                     if(j<arr.Length-1)       //判断是否执行到最后一个元素
30                     {
31                         j++;                   //如果没有,则再往后判断
32                         goto id;                   //返回标识,继续判断后面的元素
33                     }
34             }
35             foreach (int n in arr)              //循环遍历排序后的数组元素并输出
36              Console.Write(n + " ");
37             Console.WriteLine();
38             Console.ReadLine();
39             
40 
41              
42         }
43     }
44 }

 2) 插入排序法

  例如 数组 3,9,27,6,18,12,21,15

  从第二位开始拿出数字插入前面排好的位置上

      3,9,27,6,18,12,21,15

      3,9,27,6,18,12,21,15

      3,6,9,27,18,12,21,15

      3,6,9,18,27,12,21,15

      3,6,9,18,27,12,21,15

      3,6,9,12,18,27,21,15

      3,6,9,12,15,18,21,27

 

 

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Research
 8 {
 9     class Program
10     {
11 
12         static void Main(string[] args)
13         {
44             int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 };        //定义一个一维数组,并赋值
45             foreach (int n in arr)                            //循环遍历定义的一维数组,并输出其中的元素
46                 Console.Write("{0}", n + " ");
47             Console.WriteLine();
48             for (int i = 0; i < arr.Length; ++i)                        //循环访问数组中的元素
49             {
50                 int temp = arr[i];                            //定义一个int变量,并使用获得的数组元素值赋值
51                 int j = i;
52                 while ((j > 0) && (arr[j - 1] > temp))            //判断数组中的元素是否大于获得的值
53                 {
54                     arr[j] = arr[j - 1];                        //如果是,则将后一个元素的值提前
55                     --j;
56                 }
57                 arr[j] = temp;                            //最后将int变量存储的值赋值给最后一个元素
58             }
59             Console.WriteLine("排序后结果为:");
60             foreach (int n in arr)                            //循环访问排序后的数组元素并输出
61                 Console.Write("{0}", n + " ");
62             Console.WriteLine();
63             Console.ReadLine();
64             #endregion
65 
66 
67 
68         }
69     }
70 }

 3) 选择排序

      例如 数组 3,9,27,6,18,12,21,15

      选择一个第一个数作为比较数,依次和后面的数比较,找出后面比它小者交换

     3,9,27,6,18,12,21,15

     3,9,27,6,18,12,21,15  

  3,6,27,9,18,12,21,15

  3,6,9,27,18,12,21,15

  3,6,9,12,18,27,21,15

  3,6,9,12,15,27,21,18

  3,6,9,12,15,18,21,27

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Research
{
    class Program
    {

        static void Main(string[] args)
        {
            int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 };        //定义一个一维数组,并赋值
            foreach (int n in arr)                            //循环遍历定义一维数组,并输出其中的元素
                Console.Write("{0}", n + " ");
            Console.WriteLine();
            int min;                                    //定义一个int变量,用来存储数组下标
            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 t = arr[min];                            //定义一个int变量,用来存储比较大的数组元素值
                arr[min] = arr[i];                            //将小的数组元素值移动到前一位
                arr[i] = t;                                //将int变量中存储的较大的数组元素值向后移
            }
            Console.WriteLine("排序后结果为:");
            foreach (int n in arr)                            //循环访问排序后的数组元素并输出
                Console.Write("{0}", n + " ");
            Console.WriteLine();
            Console.ReadLine();



        }
    }
}

 

     

posted on 2014-12-03 11:54  优来忧往  阅读(286)  评论(0编辑  收藏  举报