C# quick sort

复制代码
 1 static void QuickSortDemo()
 2         {
 3             int[] arr = new int[] { 2, 5, -4, 11, 0, 18, 22, 67, 51, 6 };
 4 
 5             Console.WriteLine("Original array : ");
 6             foreach (var item in arr)
 7             {
 8                 Console.Write(" " + item);
 9             }
10             Console.WriteLine();
11 
12             QuickSort(arr, 0, arr.Length - 1);
13 
14             Console.WriteLine();
15             Console.WriteLine("Sorted array : ");
16 
17             foreach (var item in arr)
18             {
19                 Console.Write(" " + item);
20             }
21         }
22 
23         static int Partition(int[] arr,int left,int right)
24         {
25             int key = arr[left];
26             while(true)
27             {
28                 while(arr[left]<key)
29                 {
30                     left++;
31                 }
32                 while(arr[right]>key)
33                 {
34                     right--;
35                 }
36                 if(left<right)
37                 {
38                     if(arr[left]==arr[right])
39                     {
40                         return right;
41                     }
42                     int temp = arr[left];
43                     arr[left] = arr[right];
44                     arr[right] = temp;
45                 }
46                 else
47                 {
48                     return right;
49                 }
50             }
51         }
52 
53         static void QuickSort(int[] arr,int left,int right)
54         {
55             if(left<right)
56             {
57                 int key = Partition(arr, left, right);
58                 if(key>1)
59                 {
60                     QuickSort(arr, left, key - 1);
61                 }
62                 if(key+1<right)
63                 {
64                     QuickSort(arr, key + 1, right);
65                 }
66             }
67         }
复制代码

 

复制代码
static int Partition(int[] arr,int low,int high)
        {
            int i = low;
            int j = high;
            int pivot = arr[low];
            while(i<j)
            {
                while(i<j && arr[j]>=pivot)
                {
                    j--;
                }
                if(i<j)
                {
                    arr[i++] = arr[j];
                }
                while(i<j && arr[i]<=pivot)
                {
                    i++;
                }
                if(i<j)
                {
                    arr[j--] = arr[i];
                }
            }
            arr[i] = pivot;
            return i;
        }

        static void QuickSort(int[] arr,int low,int high)
        {
            int pivot;
            if(low<high)
            {
                pivot = Partition(arr, low, high);
                QuickSort(arr, low, pivot - 1);
                QuickSort(arr, pivot + 1, high);
            }
        }
复制代码

 

posted @   FredGrit  阅读(70)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示