当前位置:首页 > 程序设计基础(C#) > 正文内容

快速排序算法设计一

唐朝5个月前 (10-27)程序设计基础(C#)88

快速排序算法设计

(1)选择基准元素:在待排序数组中选择一个元素作为基准值(pivot),通常选择第一个、最后一个或中间元素

(2)分区操作:重新排列数组,使得比基准值小的元素放在左侧,比基准值大的元素放在右侧

    a. 设置两个指针:左指针left从数组起始位置开始,右指针right从数组末尾开始

    b. 移动指针:

        - 左指针向右移动,直到找到大于等于基准值的元素

        - 右指针向左移动,直到找到小于等于基准值的元素

    c. 交换元素:如果左指针仍在右指针左侧,则交换这两个元素

    d. 重复步骤b-c,直到左指针超过右指针

    e. 将基准值与右指针指向的元素交换,此时基准值位于正确排序位置

(3)递归排序:对基准值左右两个子数组分别重复执行步骤(1)(2),直到子数组大小为1或0时停止

using System; // 引入系统命名空间,提供基本的系统功能

class Program // 定义程序主类
{
    static void Main(string[] args) // 程序入口点
    {
        int[] arr = { 12, 7, 15, 6, 3, 8, 2, 9, 1, 11 }; // 初始化一个整数数组
        Console.WriteLine("排序前:"); // 输出提示信息"排序前:"
        PrintArray(arr); // 调用PrintArray方法打印排序前的数组
        QuickSort(arr, 0, arr.Length - 1); // 调用QuickSort方法对数组进行快速排序,参数为数组、起始索引和结束索引
        Console.WriteLine("排序后:"); // 输出提示信息"排序后:"
        PrintArray(arr); // 调用PrintArray方法打印排序后的数组
    }

    static void QuickSort(int[] arr, int low, int high) // 快速排序方法,参数为待排序数组、低位索引和高位索引
    {
        if (low < high) // 如果低位索引小于高位索引,继续排序
        {
            int pivotIndex = Partition(arr, low, high); // 调用Partition方法获取分区点索引
            QuickSort(arr, low, pivotIndex - 1); // 递归排序分区点左侧的子数组
            QuickSort(arr, pivotIndex + 1, high); // 递归排序分区点右侧的子数组
        }
    }
   
    static int Partition(int[] arr, int low, int high) // 分区方法,将数组分为两部分,左边小于基准值,右边大于基准值
    {
        int key = arr[low]; // 选择第一个元素作为基准值(pivot)
        int i = low + 1; // 左指针,从基准值后一个位置开始
        int j = high; // 右指针,从数组末尾开始

        while (i <= j) // 当左指针不超过右指针时继续循环
        {
            if (arr[i] < key) // 如果左指针指向的元素小于基准值
            {
                i++; // 左指针向右移动
            }else{ // 如果左指针指向的元素大于等于基准值
                Swap(arr, i, j); // 交换左右指针指向的元素
                j--; // 右指针向左移动
            }
        }

       
        Swap(arr, low, i - 1); // 将基准值与正确位置的元素交换
        return i - 1; // 返回分区点索引
    }
   
    static void Swap(int[] arr, int i, int j) // 交换数组中两个元素的位置
    {
        int temp = arr[i]; // 将第i个元素暂存到临时变量
        arr[i] = arr[j]; // 将第j个元素赋值给第i个位置
        arr[j] = temp; // 将临时变量中的原第i个元素赋值给第j个位置
    }
   
    static void PrintArray(int[] arr) // 打印数组元素的方法
    {
        foreach (int item in arr) // 遍历数组中的每个元素
        {
            Console.Write(item + " "); // 输出当前元素及一个空格
        }
        Console.WriteLine(); // 换行
    }
}


    文档如有描述不清楚、错误或者过时的地方,欢迎留言指出。

    文档、教程内容会不定时更新,转载请标明原帖链接,以免让过时的教程流入网络。

    分享给朋友:
    返回列表

    上一篇:c#项目创建、打开与运行

    没有最新的文章了...

    “快速排序算法设计一” 的相关文章

    c#项目创建、打开与运行

    c#项目创建、打开与运行

    创建项目1、打开代码编辑器《vscode》2、如打开编辑器后里面有开启其他项目,则需要点击编辑器菜单上的《文件》按钮,选择《新建窗口》随后关闭老窗口,在新窗口操作。3、点击编辑器菜单上的《查看》按钮,选择《命令面板》4、输入并选择“.net:新建项目”5、选择《控制台应用》6、在弹出的文件选择器里面...