C#實現常見排序算法

1、選擇排序。

//選擇排序
public static void SelectionSort(int[] dataArray)
{
    for (int i = 0; i < dataArray.Length; i++)
    {
        for (int j = i + 1; j < dataArray.Length; j++)
        {
            if (dataArray[i] > dataArray[j])
            {
                int temp = dataArray[i];
                dataArray[i] = dataArray[j];
                dataArray[j] = temp;
            }
        }
    }
}

2、冒泡排序。

//冒泡排序
public static void BubbleSort(int[] dataArray)
{
    for (int i = 0; i < dataArray.Length; i++)
    {
        bool flag = true;
        for (int j = 0; j < dataArray.Length - i - 1; j++)
        {
            if (dataArray[j] > dataArray[j + 1])
            {
                int temp = dataArray[j];
                dataArray[j] = dataArray[j + 1];
                dataArray[j + 1] = temp;
                flag = false;
            }
        }

        if (flag)
        {
            break;
        }
    }
}

3、插入排序。

//插入排序
public static void InsertionSort(int[] dataArray)
{
    for (int i = 1; i < dataArray.Length; i++)
    {
        for (int j = i; j > 0; j--)
        {
            if (dataArray[j] < dataArray[j - 1])
            {
                int temp = dataArray[j];
                dataArray[j] = dataArray[j - 1];
                dataArray[j - 1] = temp;
            }
            else
            {
                break;
            }
        }
    }
}

4、二分法排序。

//快速排序
public static void QuickSort(int[] dataArray, int left, int right)
{
    int i = left;
    int j = right;
    int temp = dataArray[left];
    if (left >= right)
        return;
    while (i != j)
    {
        while (i < j && dataArray[j] >= temp)
            j--;
        if (j > i)
            dataArray[i] = dataArray[j]; //a[i]已經賦值給temp,所以直接將a[j]賦值給a[i],賦值完之後a[j],有空位
        while (i < j && dataArray[i] <= temp)
            i++;
        if (i < j)
            dataArray[j] = dataArray[i];
    }
    dataArray[i] = temp; //把基準插入,此時i與j已經相等R[low..pivotpos-1].keys≤R[pivotpos].key≤R[pivotpos+1..high].keys
    QuickSort(dataArray, left, i - 1); /*遞歸左邊*/
    QuickSort(dataArray, i + 1, right); /*遞歸右邊*/
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章