五种排序算法实现

 

五种排序算法实现

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;

                }

            }

        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值