C#之选择排序

发布时间:2018/4/12 17:47:47 次浏览

算法描述

1.假定未排序序列中第一位为数组最小值,通过与后面的数值进行比较,找到未排序序列中最小值,与未排序序列第一位交换位置;

2.重复步骤一,对剩余未排序序列进行比较找出最小值,与未排序序列中第一位数值交换位置,直到数组所有数值排序完成;

代码实现

复制代码
/* 例如:对数组:{ 2,7,6,3,1 }进行比较 

        第一轮:{ 1,7,6,3,2 } :共比较四次
        第二轮:{ 1,2,6,3,7 } :共比较三次
        第三轮:{ 1,2,3,6,7 } :共比较二次
        第四轮:{ 1,2,3,6,7 } :共比较一次 
 */ 
 public void Select(int[] arr)
        { 
 int temp; 
 int number; 
 int numIndex; 
 bool flag; 
 for (int i = 0; i < arr.Length -1; i++)
            {
                flag = true;
                number = arr[i];
                numIndex = i; for (int j = i + 1; j < arr.Length; j++)
                { 
 if (number > arr[j])
                    {
                        number = arr[j];
                        numIndex = j;
                        flag = false;
                    }
                }

                temp = arr[i];
                arr[i] = arr[numIndex];
                arr[numIndex] = temp; 
 if (flag == true)
                { break;
                }

                Console.Write("选择排序:"); 
 foreach (int item in arr)
                {
                    Console.Write(item + " ");
                }
                Console.WriteLine();

            }
        }
复制代码

完整代码

复制代码
using System; 
namespace SelectSortApplication
{ 
 class Program
    { 
 static void Main(string[] args)
        { 
 var setArray = new SetArray(); 
 var selectSort = new SelectSort(); 
 int[] arr = setArray.GetArray();
            selectSort.Select(arr);

            Console.ReadLine();
        }
    } 
 class SetArray
    { 
 public int[] GetArray()
        { 
 int length; int[] arr;
 Console.WriteLine("请输入数组长度:");
            length = Convert.ToInt32(Console.ReadLine());

            arr = new int[length]; for (int i = 0; i <= length -1; i++)
            {
                Console.Write("请输入数组第{0}位数值:", i);
                arr[i] = Convert.ToInt32(Console.ReadLine());
            }

            Console.Clear();

            Console.Write("arr[] = {"); 
 foreach (int item in arr)
            {
                Console.Write(item + " ");
            }
            Console.Write("}\n"); return arr;
        }
    } 
 class SelectSort
    { 
 public void Select(int[] arr)
        { 
 int temp; 
 int number; 
 int numIndex; 
 bool flag; 
 for (int i = 0; i < arr.Length -1; i++)
            {
                flag = true;
                number = arr[i];
                numIndex = i; for (int j = i + 1; j < arr.Length; j++)
                { 
 if (number > arr[j])
                    {
                        number = arr[j];
                        numIndex = j;
                        flag = false;
                    }
                }

                temp = arr[i];
                arr[i] = arr[numIndex];
                arr[numIndex] = temp; 
 if (flag == true)
                { break;
                }
            }
            Console.Write("选择排序:"); 
 foreach (int item in arr)
            {
                Console.Write(item + " ");
            }
            Console.WriteLine();
        }
    }
}
复制代码