码迷,mamicode.com
首页 > 编程语言 > 详细

常见的排序算法

时间:2018-05-15 22:46:39      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:冒泡排序   情况   冒泡   直接插入   效率   void   insert   简单的   style   

1、假性冒泡排序

 //简单的交换排序(假性冒泡排序),效率低下, 会将较小的记录移动到最后
        static void BubbleSort_Verson1(List<int> list)
        {
            int tempVal = 0;
            for (int i = 0, iMax = list.Count; i < iMax; ++i)
            {
                for (int j = i + 1, jMax = list.Count; j < jMax; j++)
                {
                    if (list[i] > list[j])
                    {
                        tempVal = list[i] + list[j];
                        list[i] = tempVal - list[i];
                        list[j] = tempVal - list[i];
                    }
                }
            }
        }

2、冒泡排序:

   static void BubbleSort_Version2(List<int> list)
        {
            int temp = 0;
            for (int i = 0, iMax = list.Count - 1; i < iMax; ++i)
            {
                for (int j = 0, jMax = list.Count - 1 - i; j < jMax; ++j)
                {
                    if (list[j] > list[j + 1])
                    {
                        temp = list[j] + list[j + 1];
                        list[j] = temp - list[j];
                        list[j + 1] = temp - list[j];
                    }
                }
            }
        }

3、优化后的冒泡排序:

 //冒泡排序优化:如果list中的元素大部分都是有序的,在不优化的情况下,会做无意义的比较,这样优化后可以避免该问题
        static void BubbleSort_Version3(List<int> list)
        {
            int temp = 0;
            bool flag = true;   //冒泡优化
            for (int i = 0, iMax = list.Count - 1; i < iMax && flag; ++i)
            {
                flag = false;
                for (int j = 0, jMax = list.Count - 1 - i; j < jMax; ++j)
                {
                    if (list[j] > list[j + 1])
                    {
                        temp = list[j] + list[j + 1];
                        list[j] = temp - list[j];
                        list[j + 1] = temp - list[j];
                        flag = true;
                    }
                }
            }
        }

4、简单选择排序:

static void SimpleSelectSort(List<int> list)
        {
            int minIndex, tempVal;
            for (int i = 0, iMax = list.Count - 1; i < iMax; ++i)
            {
                minIndex = i;
                for (int j = i + 1, jMax = list.Count; j < jMax; ++j)
                {
                    if (list[j] < list[minIndex])
                        minIndex = j;
                }

                if (minIndex != i)
                {
                    tempVal = list[minIndex] + list[i];
                    list[i] = tempVal - list[i];
                    list[minIndex] = tempVal - list[i];
                }
            }
        }

5、直接插入排序:

 1   //直接插入排序:将一个无序表中的记录插入一个已经排好序的有序表中,指导插入完为止
 2         static void InsertSort(List<int> list)
 3         {
 4             int i, iMax, j, tempVal;
 5 
 6             //i=1 开始,是因为初始假设数组第 0 位组成一个有序数组
 7             for (i = 1, iMax = list.Count; i < iMax; ++i)
 8             {
 9                 //找出无需数组的中比有序数组中的最后一位小的记录,进行插入
10                 if (list[i] < list[i - 1])
11                 {
12                     //存储要放入的记录,防止数据丢失
13                     tempVal = list[i];
14 
15                     //将有序数组从第 i-1(相对于整个数组) 开始,依次后移一位(之所以可以后移,因为 tempVal 保留了第 i 位置的,从而提供出一个空位), 即寻找合适的插入位置
16                     for (j = i - 1; j >= 0 && list[j] > tempVal; --j)
17                         list[j + 1] = list[j];
18 
19                     list[j + 1] = tempVal;  //将保存的记录插入合适的找寻出的位置
20                 }
21             }
22         }

 

常见的排序算法

标签:冒泡排序   情况   冒泡   直接插入   效率   void   insert   简单的   style   

原文地址:https://www.cnblogs.com/luguoshuai/p/9042934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!