几种简单排序(C#)

using System;

class ArraySort
{
    private long[] a;       //ref to array a
    private int nElems;     //number of data items

    public ArraySort(int max)    //constructor
    {
        a = new long[max];      //create the array
        nElems = 0;             //no items yet
    }

    public void Insert(long value) //put element into array
    { 
        a[nElems] = value;      //insert it
        nElems++;               //increment size
    }

    public void Display()       // display array contents
    {
        for (int i = 0; i < nElems; i++)    //for each element
            Console.Write("{0} ", a[i]);    //display it
        Console.WriteLine();
    }
    //冒泡排序
    public void BubbleSort()    
    { 
        int outer,inner;

        for (outer = nElems - 1; outer > 1; outer--)    // outer loop(backward)
        {
            for (inner = 0; inner < outer; inner++)      // inner loop(forward)
            {
                if (a[inner] > a[inner + 1])            // out of order?
                    Swap(inner, inner+1);               //swap them
            }
        }

    }                                                   //end bubblesort
    //选择排序
    public void SelectionSort()
    {
        int outer, inner, min;
        for (outer = 0; outer < nElems - 1; outer++)   //outer loop
        {
            min = outer;                               //minimun
            for (inner = outer + 1; inner < nElems; inner++ )   //inner loop
            {
                if (a[inner] < a[min])                  //if min greater
                    min = inner;                        //we have a new min
                    Swap(outer, min);                   //swap them
            }
        }

    }
    //插入排序
    public void InsertSort()
    {
        int inner, outer;
        for(outer =1; outer<nElems; outer++) // out is dividing line
        {
            long temp=a[outer];     //remove marked item
            inner = outer;               //start shifts at out
            while (inner > 0 && a[inner - 1] >= temp)   //until one is smaller
            { 
                a[inner] = a[inner-1];      // shift item right
                --inner;                    // go left one position
            }
            a[inner] = temp;               //insert marked item
        }   //end for
    }       //end InsertionSort();

    public void Swap(int one, int two)
    {
        long temp;
        temp = a[one];
        a[one] = a[two];
        a[two] = temp;
    }
}   //end class ArrayBubble                               


class ArraySortApp
{
    static void Main(string[] args)
    {
        int MaxSize = 100;
        ArraySort arr;
        arr = new ArraySort(MaxSize);

        arr.Insert(77);
        arr.Insert(99);
        arr.Insert(44);
        arr.Insert(55);
        arr.Insert(22);
        arr.Insert(88);
        arr.Insert(11);
        arr.Insert(00);
        arr.Insert(66);
        arr.Insert(33);

        arr.Display();      //display items

        //arr.BubbleSort();   //bubble sort them
        //arr.SelectionSort();    // selection-sort them
        arr.InsertSort();         //insertion-sort them

        arr.Display();      //display them again

        Console.ReadLine();
    }   // end main
}   // end BubbleSortApp

以下是C#实现的几种常见排序算法示例: 1. 冒泡排序 ```csharp static void BubbleSort(int[] arr) { int len = arr.Length; for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` 2. 选择排序 ```csharp static void SelectionSort(int[] arr) { int len = arr.Length; for (int i = 0; i < len - 1; i++) { int minIndex = i; for (int j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } if (minIndex != i) { int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } } ``` 3. 插入排序 ```csharp static void InsertionSort(int[] arr) { int len = arr.Length; for (int i = 1; i < len; i++) { int temp = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > temp) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = temp; } } ``` 4. 快速排序 ```csharp static void QuickSort(int[] arr, int left, int right) { if (left < right) { int pivot = Partition(arr, left, right); QuickSort(arr, left, pivot - 1); QuickSort(arr, pivot + 1, right); } } static int Partition(int[] arr, int left, int right) { int pivot = arr[right]; int i = left - 1; for (int j = left; j < right; j++) { if (arr[j] < pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp2 = arr[i + 1]; arr[i + 1] = arr[right]; arr[right] = temp2; return i + 1; } ``` 5. 归并排序 ```csharp static void MergeSort(int[] arr, int left, int right) { if (left < right) { int mid = (left + right) / 2; MergeSort(arr, left, mid); MergeSort(arr, mid + 1, right); Merge(arr, left, mid, right); } } static void Merge(int[] arr, int left, int mid, int right) { int[] temp = new int[right - left + 1]; int i = left; int j = mid + 1; int k = 0; while (i <= mid && j <= right) { if (arr[i] < arr[j]) { temp[k++] = arr[i++]; } else { temp[k++] = arr[j++]; } } while (i <= mid) { temp[k++] = arr[i++]; } while (j <= right) { temp[k++] = arr[j++]; } for (int m = 0; m < temp.Length; m++) { arr[left + m] = temp[m]; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值