快速排序法C#

14 篇文章 0 订阅
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 快速排序法
{
    class Program
    {
        static int process = 0;
        static int size;
        static int[] data = new int[100];

        static void Main(string[] args)
        {
            Console.Write("请输入数组大小(100以下):");
            size = int.Parse(Console.ReadLine());
            Inputarr();
            Console.Write("原始数据为");
            Showdata();

            Quick(data, size, 0, size - 1);
            Console.Write("\n排序结果为:");
            Showdata();
            Console.ReadKey();
        }
        static void Inputarr()
        {
            //以随机数输入
            Random rand = new Random();
            int i;
            for (i = 0; i < size; i++)
            {
                data[i] = (Math.Abs(rand.Next(99))) + 1;
            }
        }

        static void Showdata()
        {
            int i;
            for (i = 0; i < size; i++)
            {
                Console.Write(data[i] + " ");
            }
            Console.WriteLine();
        }
        static void Quick(int[] d, int size, int lf, int rg)
        {
            int i, j, tmp;
            int lf_idx;
            int rg_idx;
            int t;
            //1:第一项的键值为d[lf]
            if (lf < rg)
            {
                lf_idx = lf + 1;
                rg_idx = rg;

                //排序
                while (true)
                {
                    Console.Write("[处理过程" + (process++) + "]=>");
                    for (t = 0; t < size; t++)
                    {
                        Console.Write("[" + d[t] + "]");
                    }
                    Console.Write("\n");

                    for (i = lf + 1; i <= rg; i++)
                    {
                        if (d[i] >= d[lf])
                        {
                            lf_idx = i;
                            break;
                        }
                        lf_idx++;
                    }
                    for (j = rg; j >= lf + 1; j--)
                    {
                        if (d[j] <= d[lf])
                        {
                            rg_idx = j;
                            break;
                        }
                        rg_idx--;
                    }
                    if (lf_idx < rg_idx)
                    {
                        tmp = d[lf_idx];
                        d[lf_idx] = d[rg_idx];
                        d[rg_idx] = tmp;
                    }
                    else
                    {
                        break;
                    }

                }
                if (lf_idx >= rg_idx)
                {
                    tmp = d[lf];
                    d[lf] = d[rg_idx];
                    d[rg_idx] = tmp;

                    Quick(d, size, lf, rg_idx - 1);

                    Quick(d, size, rg_idx + 1, rg);
                }
            }
        }
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
快速排序(Quick Sort)是一种基于比较的排序算法,它的时间复杂度为O(nlogn),常用于对数组进行排序。 以下是 C# 语言实现快速排序的示例代码: ```csharp using System; class QuickSort { static void Main(string[] args) { int[] arr = { 5, 2, 8, 6, 3, 7, 1, 4 }; Console.WriteLine("Original Array:"); PrintArray(arr); QuickSortAlgorithm(arr, 0, arr.Length - 1); Console.WriteLine("\nSorted Array:"); PrintArray(arr); } static void QuickSortAlgorithm(int[] arr, int left, int right) { if (left < right) { int pivotIndex = Partition(arr, left, right); QuickSortAlgorithm(arr, left, pivotIndex - 1); QuickSortAlgorithm(arr, pivotIndex + 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 - 1; j++) { if (arr[j] < pivot) { i++; Swap(ref arr[i], ref arr[j]); } } Swap(ref arr[i + 1], ref arr[right]); return i + 1; } static void Swap(ref int a, ref int b) { int temp = a; a = b; b = temp; } static void PrintArray(int[] arr) { foreach (int element in arr) { Console.Write(element + " "); } } } ``` 程序输出: ``` Original Array: 5 2 8 6 3 7 1 4 Sorted Array: 1 2 3 4 5 6 7 8 ``` 在上面的代码中,`QuickSortAlgorithm` 函数递归地调用自身,直到排序完成。`Partition` 函数选择数组的最后一个元素作为主元(pivot),并将比主元小的元素交换到左侧,比主元大的元素交换到右侧,然后返回主元的下标。 `Swap` 函数用于交换数组中两个元素的值。 最后,`PrintArray` 函数将数组打印出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值