.NET面试题系列(三)排序算法

时间:2023-03-09 04:27:26
.NET面试题系列(三)排序算法

冒泡排序

           int[] arr = { , , , , , 7, 2, 4 };
//外层循环控制排序趟数
for (int i = ; i < arr.Length - ; i++)
{
//内层循环控制每一趟排序多少次
for (int j = ; j < arr.Length - - i; j++)
{
if (arr[j] > arr[j + ])
{
int temp = arr[j];
arr[j] = arr[j + ];
arr[j + ] = temp;
}
}
}

.NET面试题系列(三)排序算法

快速排序

选择排序也是一种简单直观的排序算法。

它的工作原理很容易理解:初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。

以此类推,直到所有元素均排序完毕。

注意选择排序与冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;

而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。

 int[] arr = { , , , , , , , , ,  }; // 从小到大选择排序

.NET面试题系列(三)排序算法

void SelectionSort(int[] A)
{
for (int i = ; i < A.Length - ; i++) // i为已排序序列的末尾
{
int min = i;
for (int j = i + ; j < A.Length; j++) // 未排序序列
{
if (A[j] < A[min]) // 找出未排序序列中的最小值
{
min = j;
}
}
if (min != i)
{
Swap(A, min, i); // 放到已排序序列的末尾,该操作很有可能把稳定性打乱,所以选择排序是不稳定的排序算法
}
}
}

希尔排序

http://www.cnblogs.com/cnki/

堆排序

https://www.cnblogs.com/learn-program/p/9613042.html

https://www.cnblogs.com/kubidemanong/p/9722646.html

http://www.cnblogs.com/eniac12/p/5329396.html

https://www.cnblogs.com/cuiyuanzhang/p/10452516.html