C# 排序

  1using System;
  2
  3namespace 算法
  4ExpandedBlockStart.gifContractedBlock.gif{
  5ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
  6    /// 排序
  7    /// </summary>

  8    public static class Sort
  9ExpandedSubBlockStart.gifContractedSubBlock.gif    {
 10ContractedSubBlock.gifExpandedSubBlockStart.gif        ==== 选择排序 ====#region ==== 选择排序 ====
 11ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 12        /// 选择排序
 13        /// </summary>
 14        /// <param name="list"></param>

 15        public static void SelectSort(int[] list)
 16ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 17            for (int i = 0; i < list.Length; i++)
 18ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 19                int min = i;
 20                for (int j = i + 1; j < list.Length; j++)
 21                    if (list[j] < list[min])
 22                        min = j;
 23
 24                if (min != i)
 25ExpandedSubBlockStart.gifContractedSubBlock.gif                {
 26                    int temp = list[min];
 27                    list[min] = list[i];
 28                    list[i] = temp;
 29                }

 30            }

 31        }

 32        #endregion

 33
 34ContractedSubBlock.gifExpandedSubBlockStart.gif        ==== 冒泡排序 ====#region ==== 冒泡排序 ====
 35ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 36        /// 冒泡排序
 37        /// </summary>
 38        /// <param name="list"></param>

 39        public static void BubbleSort(int[] list)
 40ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 41            for (int i = 0; i < list.Length; i++)
 42ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 43                for (int j = 0; j < list.Length - i - 1; j++)
 44ExpandedSubBlockStart.gifContractedSubBlock.gif                {
 45                    if (list[j] > list[j + 1])
 46ExpandedSubBlockStart.gifContractedSubBlock.gif                    {
 47                        int temp = list[j];
 48                        list[j] = list[j + 1];
 49                        list[j + 1= temp;
 50                    }

 51                }

 52            }

 53        }

 54        #endregion

 55
 56ContractedSubBlock.gifExpandedSubBlockStart.gif        ==== 插入排序 ====#region ==== 插入排序 ====
 57ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 58        /// 直接插入排序
 59        /// </summary>
 60        /// <param name="list"></param>

 61        public static void InsertSort(int[] list)
 62ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 63            for (int i = 1; i < list.Length; i++)
 64ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 65                int temp = list[i];
 66                int j = i - 1;
 67                while (j >= 0 && list[j] > temp)
 68ExpandedSubBlockStart.gifContractedSubBlock.gif                {
 69                    list[j + 1= list[j];
 70                    j--;
 71                }

 72                list[j + 1= temp;
 73            }

 74        }

 75
 76ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 77        /// 折半插入排序
 78        /// </summary>
 79        /// <param name="list"></param>

 80        public static void BinarySort(int[] list)
 81ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 82            for (int i = 1; i < list.Length; i++)
 83ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 84                int low = 0;
 85                int high = i - 1;
 86                int temp = list[i];
 87
 88                //查找
 89                while (low <= high)
 90ExpandedSubBlockStart.gifContractedSubBlock.gif                {
 91                    int mid = (low + high) / 2;
 92
 93                    if (temp < list[mid])
 94                        high = mid - 1;
 95                    else
 96                        low = mid + 1;
 97                }

 98
 99                //向后移
100                for (int j = i - 1; j >= low; j--)
101                    list[j + 1= list[j];
102
103                list[low] = temp;
104            }

105        }

106        #endregion

107
108ContractedSubBlock.gifExpandedSubBlockStart.gif        ==== 快速排序 ====#region ==== 快速排序 ====
109ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
110        /// 快排 一次划分
111        /// </summary>
112        /// <param name="list">划分的数组</param>
113        /// <param name="i">数组低端上标</param>
114        /// <param name="j">数组高端下标</param>
115        /// <returns>返回划分后基准的位置</returns>

116        private static int Partition(int[] list, int i, int j)
117ExpandedSubBlockStart.gifContractedSubBlock.gif        {
118            int key = list[i];
119
120            while (i < j)
121ExpandedSubBlockStart.gifContractedSubBlock.gif            {
122                //j 向左扫描
123                while (list[j] >= key && i < j)
124                    j--;
125
126                if (i < j)
127                    list[i++= list[j];
128
129                //i 向右扫描
130                while (list[i] <= key && i < j)
131                    i++;
132
133                if (i < j)
134                    list[j--= list[i];
135            }

136
137            list[i] = key;
138            return i;
139        }

140
141ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
142        /// 快速排序
143        /// </summary>
144        /// <param name="list"></param>

145        public static void QuickSort(int[] list, int low, int high)
146ExpandedSubBlockStart.gifContractedSubBlock.gif        {
147            if (low < high - 1)
148ExpandedSubBlockStart.gifContractedSubBlock.gif            {
149                int key = Partition(list, low, high);
150                QuickSort(list, low, key - 1);
151                QuickSort(list, key + 1, high);
152            }

153        }

154        #endregion

155
156ContractedSubBlock.gifExpandedSubBlockStart.gif        ==== 堆排序 ====#region ==== 堆排序 ====
157ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
158        /// 堆排 调整成堆
159        /// </summary>
160        /// <param name="list"></param>
161        /// <param name="i"></param>
162        /// <param name="m"></param>

163        private static void Adjust(int[] list, int i, int m)
164ExpandedSubBlockStart.gifContractedSubBlock.gif        {
165            int temp = list[i];
166            int j = i * 2 + 1;
167
168            while (j <= m)
169ExpandedSubBlockStart.gifContractedSubBlock.gif            {
170                //比较左右孩子
171                if (j < m)
172                    if (list[j] < list[j + 1])
173                        j = j + 1;
174
175                //比较根结点和大孩子
176                if (temp < list[j])
177ExpandedSubBlockStart.gifContractedSubBlock.gif                {
178                    list[i] = list[j];
179                    i = j;
180                    j = 2 * i + 1;
181                }

182                else
183ExpandedSubBlockStart.gifContractedSubBlock.gif                {
184                    j = m + 1;
185                }

186            }

187
188            list[i] = temp;
189        }

190
191ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
192        /// 堆排序
193        /// </summary>
194        /// <param name="list"></param>

195        public static void HeapSort(int[] list)
196ExpandedSubBlockStart.gifContractedSubBlock.gif        {
197            //建立初始堆
198            for (int i = (list.Length - 1/ 2; i >= 0; i--)
199                Adjust(list, i, list.Length - 1);
200
201            //交换根结点和堆的最后一个结点
202            for (int i = list.Length - 1; i >= 1; i--)
203ExpandedSubBlockStart.gifContractedSubBlock.gif            {
204                int temp = list[0];
205                list[0= list[i];
206                list[i] = temp;
207                Adjust(list, 0, i - 1);
208            }

209        }

210        #endregion

211    }

212}

 

转载于:https://www.cnblogs.com/linsongbin/archive/2009/06/21/1507647.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值