排序算法小结
一、选择排序:选择排序是一种最简单直观的排序算法。首先在未排序数列中找到最大(小)的元素,存放到排序数列的起始(结束)位置,再从剩余的排序元素中继续寻找最大(小)的元素,然后放在已排序元素的末尾(前面)。以此类推,直到所有元素排序完成。代码如下:
/// <summary> /// 选择排序(从小到大) /// </summary> /// <param name="list">待排序数组</param> public static int[] SelectionSort(int[] list) { int min; //存储最小元素 int minIndex; //存储最小元素的索引 int temp; int i, j; int len = list.Length; //数组长度 for (i = 0; i < len - 1; i++) { min = list[i]; minIndex = i; for (j = i; j < len; j++) { if (list[j] < min) { min = list[j]; minIndex = j; } } if (minIndex > i) //交换元素,把最小的元素放在最前面 { temp = list[i]; list[i] = min; list[minIndex] = temp; } } return list; }
二、冒泡排序:冒泡排序是一种交换排序。它重复的走访要排序的数列,一次比较两个元素,如果他们的顺序错误则把它们交换过来。走访数列的工作是重复进行直到没有元素交换,也就说明已完成排序。代码如下:
/// <summary> /// 冒泡排序(从小到大) /// </summary> /// <param name="list">待排序数组</param> /// <returns></returns> public static int[] BubbleSort(int[] list) { int i, j; int temp; int len = list.Length; int exchange = len - 1; //记录发生交换的位置 while (true) { int bound = exchange; exchange = 0; //假定本趟比较没有元素交换 for (i = 0; i < bound; i++) { j = i + 1; if (list[i] > list[j]) //交换元素,值大的元素后移 { temp = list[i]; list[i] = list[j]; list[j] = temp; exchange = i; } } if (exchange == 0) //本趟比较没有发生元素交换则说明已经排序好 { break; } } return list; }
三、插入排序:插入算法首先把要排序的数组分成两部分:第一部分为未排序数据包含了这个数组的所有元素,但最后一个元素除外,而第二部分为已排序数据就只包含这一个元素。对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。代码如下:
/// <summary> /// 插入排序(从小到大) /// </summary> /// <param name="list">待排序数组</param> /// <returns></returns> public static int[] InsertionSort(int[] list) { int i, j; int temp; int len = list.Length; for (i = 1; i < len; i++) { j = i - 1; temp = list[i]; while (j>=0 && list[j]>temp) { list[j + 1] = list[j]; j--; } list[j+1] = temp; //被排序的数放到正确的位置 } return list; }优质内容筛选与推荐>>