五种排序算法实现

    技术2022-05-11  2

     

    五种排序算法实现

    class Sorter

        {

            //选择排序法实现

            private int min;

            public void Sort1(int[] arr)

            {

                for (int i = 0; i < arr.Length - 1; ++i)

                {

                    min = i;

                    for (int j = i + 1; j < arr.Length; ++j)

                    {

                        if (arr[j] < arr[min])

                            min = j;

                    }

                    int t = arr[min];

                    arr[min] = arr[i];

                    arr[i] = t;

                }

            }

            //冒泡排序法实现

            public void Sort2(int[] arr)

            {

                int i, j, temp;

                bool done = false;

                j = 1;

                while ((j < arr.Length) && (!done))//判断长度

                {

                    done = true;

                    for (i = 0; i < arr.Length - j; i++)

                    {

                        if (arr[i] > arr[i + 1])

                        {

                            done = false;

                            temp = arr[i];

                            arr[i] = arr[i + 1];//交换数据

                            arr[i + 1] = temp;

                        }

                    }

                    j++;

                }

            }

            private void swap(ref int l, ref int r)

            {

                int temp;

                temp = l;

                l = r;

                r = temp;

            }

            //快速排序法实现

            public void Sort3(int[] list, int low, int high)

            {

                int pivot;//存储分支点

                int l, r;

                int mid;

                if (high <= low)

                    return;

                else if (high == low + 1)

                {

                    if (list[low] > list[high])

                        swap(ref list[low], ref list[high]);

                    return;

                }

                mid = (low + high) >> 1;

                pivot = list[mid];

                swap(ref list[low], ref list[mid]);

                l = low + 1;

                r = high;

                do

                {

                    while (l <= r && list[l] < pivot)

                        l++;

                    while (list[r] >= pivot)

                        r--;

                    if (l < r)

                        swap(ref list[l], ref list[r]);

                } while (l < r);

                list[low] = list[r];

                list[r] = pivot;

                if (low + 1 < r)

                    Sort3(list, low, r - 1);

                if (r + 1 < high)

                    Sort3(list, r + 1, high);

            }

            //插入排序法实现

            public void Sort4(int[] arr)

            {

                for (int i = 1; i < arr.Length; i++)

                {

                    int t = arr[i];

                    int j = i;

                    while ((j > 0) && (arr[j - 1] > t))

                    {

                        arr[j] = arr[j - 1];//交换顺序

                        --j;

                    }

                    arr[j] = t;

                }

            }

            //希尔排序法实现

            public void Sort5(int[] arr)

            {

                int inc;

                for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ;

                for (; inc > 0; inc /= 3)

                {

                    for (int i = inc + 1; i <= arr.Length; i += inc)

                    {

                        int t = arr[i - 1];

                        int j = i;

                        while ((j > inc) && (arr[j - inc - 1] > t))

                        {

                            arr[j - 1] = arr[j - inc - 1];//交换数据

                            j -= inc;

                        }

                        arr[j - 1] = t;

                    }

                }

            }

        }


    最新回复(0)