序文
インタビューと審査プロセスは、ソートアルゴリズムの理解を深めるために、ソートアルゴリズムの面接の質問に起こるであろう、と私は様々なソートアルゴリズムのためにまとめること。
1、バブルソートアルゴリズム(バブルソート)
1.1アルゴリズムの説明
(1)隣接する要素を比較します。最初は、二以上である場合には、それらの2を交換しました。
(2)第一の対の先頭から最後のペアの端部に、隣接する素子の各対について同じ作業を行います。この時点で、それは最後の要素は、最大数であるべきです。
(3)最後のものを除いて、すべての要素のための上記の手順を繰り返します。
(4)上記のステップより少ない要素の各繰り返しの持続時間、数の組を比較する必要がなくなるまで。
O(n)とO(N2)の最悪のケースの時間計算量の最良の時間複雑
1.2マップのプレゼンテーションを移動します
1.3 C#コードの実装
クラスSortDemo公共 { ます。public voidバブルソート(int型ARR) { int型のTEMP = 0; //はarr.Length-1回行く必要がある ため(;; I <arr.Length-1 I ++はI = 0 INT) { //各パスを必要な比較の数 のために(INT J = 0、J <-I-arr.length 1; J ++) { //昇順 IF(ARR [J]> ARR [J + 1]) { TEMP = ARR [J]; /一時変数に格納されている/大きい変数 ARR [J] = ARR [Jの+ 1]; ARR [J + 1] = TEMP; } } } } }
図2に示すように、直接挿入ソート(挿入ソート)
2.1アルゴリズムの説明
(1)ソートされていると考えることができる最初の要素から始まります。
(2)前後からでスキャン順序付けされた要素のシーケンスの次の要素を取り出します。
(3)要素(ソート)は、次の位置に要素新しい要素よりも大きい場合、
(4)手順3を繰り返し、それは以下の要素の新しい位置に等しいソート要素を見つけるまで。
(5)新たな要素が後方位置に挿入されます。
(6)5のステップ2を繰り返します。
2.2マップのプレゼンテーションを移動します
2.3 C#コードの実装
クラスSortDemo公共 { 公共ボイド挿入ソート(INT [] ARR) { int型のTEMP = 0; //トラバースの数(第2の開始から)挿入する ために(INT I = 1; Iは<arr.length; Iは++) {
一時=のARR [I]; //番号が挿入されます
int j=i-1;//(j为已排序的待插入的位置序号)
//若已排序的数大于待插入数,则往后移一位 while(j>=0&&arr[j]>temp) { arr[j+1]=arr[j]; j--; } arr[j+1]=temp;//将待插入的数放入插入位置 } } }
3、选择排序(SelectionSort)
3.1 算法描述
选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
(1)初始状态:无序区为R[1..n],有序区为空;
(2)第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
(3)n-1趟结束,数组有序化了。
3.2 动图演示
3.3 C#代码实现
public void SelectionSort(int[] arr) {
int temp; for(int i=0;i<arr.Length-1;i++)
{
int minVal=arr[i];
int minIndex=i;
for(int j=i+1;j<arr.Length;j++)
{
if(minVal>arr[j])
{
minVal=arr[j];
minIndex=j;
}
}
temp=arr[i];
arr[i]=minVal;
arr[minIndex]=temp;
} } }
4、快速排序(QuickSort)
4.1 算法描述
(1)从数列中挑出一个元素,称为 “基准”(pivot);
(2)重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
(3)递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
4.2 动图演示
4.3 c#代码实现
public Class SortDemo { public void QuickSort(int[] arr,int low,int high) { if(low<high) { int keyIndex=low; int key=arr[low]; int first=low; int last=high; while(first<last) { while(last>=key&&first<last) last--; Swap(arr,last,keyIndex); keyIndex=last; while(first<=key&&first<last) first++; スワップ(ARR、まず、キーインデックス)。
キーインデックス=最初; } クイックソート(ARR、低、キーインデックス-1)。 クイックソート(ARR、キーインデックス+ 1、高)。 } } プライベートボイドスワップ(INT [] ARR、I、J) { int型の一時=のARR [I]。 ARR [I] =のARR [J]。 ARR [j]はTEMPを=。 } }