インタビューのソーティング要約のすべての種類は、多くの場合、テストアルゴリズム。(C#)とオリジナルhttps://www.cnblogs.com/geduocoding/p/7097870.htmlから

序文

インタビューと審査プロセスは、ソートアルゴリズムの理解を深めるために、ソートアルゴリズムの面接の質問に起こるであろう、と私は様々なソートアルゴリズムのためにまとめること。

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を=。 } }

コードをコピー

おすすめ

転載: www.cnblogs.com/whitebai/p/11544126.html