c#的 排序算法--冒泡排序,快速排序

本文介绍了C#中的两种交换排序算法:冒泡排序和快速排序。详细阐述了冒泡排序的工作原理,展示了其O(n^2)的时间复杂度。接着解释了快速排序的步骤,指出其效率高于冒泡排序。通过示例展示了快速排序的过程,逐步分解了排序的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

交换排序: 包括冒泡排序,快速排序。

  选择排序: 包括直接选择排序,堆排序。

  插入排序: 包括直接插入排序,希尔排序。

  合并排序: 合并排序。 

冒泡排序:比较第一个和第二个,后者小于前者两者交换,第二个比较第三个,第三个比较第四个,直到最后,然后重复该过程
9 8 7 6
8 9 7 6
8 7 9 6
8 7 6 9
7 8 6 9
7 6 8 9
6 7 8 9
over!

              int temp;
              int[] arrSort = new int[] { 10, 8, 3, 5, 6, 7, 9 };
            for (int i = 0; i < arrSort.Length; i++)
             {
                 for (int j = i + 1; j < arrSort.Length; j++)
                 {
                      if (arrSort[j] < arrSort[i])
                    {
                        temp = arrSort[j];                       
                       arrSort[j] = arrSort[i];
                      arrSort[i] = temp;

                    }
                 }
             }

冒泡排序为:O(n^2 )
若第二个循环改成 for (i = 0; i < arrSort.Length - 1; i++) 内循环次数高于冒泡排序

快速排序,效率比冒泡排序高

1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;

2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];

3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;

4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;

5)、重复第3、4步,直到I=J;

49 38 65 97 76 13 27
I=1 J=7 X =49
从后往前找小于的,并交换位置
27 38 65 97 76 13 49
J = 7 I = 1
从前往后找大于的,并 交换位置
27 38 49 97 76 13 65
I = 3,J =7
从后往前找小于的,并交换位置
27 38 13 97 76 49 65
J = 6, I=3
从前往后找大于的,并交换位置
27 38 13 49 76 97 65
I =6, J =6
第一次排序完成

{27,38,13}49{76,97,65}

再重复上述顺序,直到每个集合元素为1
{27 38 13 } { 76 97 65}
{13 38 27 } { 65 97 76}
{13 27 38 } { 65 76 97}
再重复上述顺序,直到每个集合元素为1

private void QuickSort(List<int> arr, int left, int right)  
   {  
       if (left < right)  
       {  
           int index = (left + right)/2;//取中间的数的下角标   
           int key = arr[index]; //取中间的数,作为对照数  
           int i = left;  
           int j = right;  
           while (true)  
           {  
               while (arr[i] <= key && i != index) //一直循环直到碰到第一个小于对照数时跳出循环,并且判断是否是相同的数,防止死循环 (去除对照数,防止把对照数当做相同的数出现运算错误)  
               {  
                   i++;  
               }  
               while (arr[j] > key)//同上,碰到第一个大于对照数跳出    
               {  
                   j--;  
               }  
               if (i >= j)//如果前面的位置大于后面的证明数组循环一遍了,跳出循环    
               {  
                   break;  

               }  
               swap(arr, i, j);  
           }  
           QuickSort(arr, left, i);  
           QuickSort(arr, i + 1, right);  
       }  
   }  

   private void swap(List<int> arr, int i, int j)  
   {  
       int temp = arr[i];  
       arr[i] = arr[j];  
       arr[j] = temp;  
   }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值