快速排序

C语言

#include<stdlib.h>
#include<string.h>
#define N 10

void quickSort(int a[], int start, int end)
{
  int base, middle;    
  
  int tempStart = start,  //备份作用,保留头尾的数值。因为索引start和end会移动改变。用在递归调用的参数。
      tempEnd = end;
  
  //对于这种递归的函数,内部必须要有一个函数返回的条件
  if (tempStart >= tempEnd)
      {
        return;
       }
  base = a[start];    //设置基准数
  
  while (start < end)
    {
        while (start < end && a[end] > base)
         {
            end--;
         }
/*        if (start < end)
	  {
		   int t;        
		   t = a[start];
		   a[start] = a[end];
		   a[end] = t;   
		   start++;
	  }
*/	 
          a[start] = a[end]
          while (start < end && a[start] < base)
	  {
	       start++;
	  }
/*	 if (start < end)
	  {
		     int t;
		     t = a[start];
		     a[start] = a[end];
		     a[end] = t;
		     end--;
	   }  
*/
          a[end] = a[start]	   
     }
     a[start] = base;   //将开头的基准数赋值给此时start指向的位置,即成为分割点,左边为<该数的值,右边为》该数的值
     middle = start;     //将此时的start索引变成切分两部分的中间索引
   //  递归调用
     quickSort(a, tempStart, middle - 1);    
     quickSort(a, middle + 1, tempEnd);   
}			 

int main()
  {
	 int a[N] = { 12,54,84,1,3,6,0,98,120,10 };
	 //调用函数,传入参数:数组名,头索引,尾索引
	 quickSort(a, 0, N - 1);
	 
	 for (int i = 0; i<N; i++)
	 printf("%5d", a[i]);
	 system("pause");
  }

python
递归

def quick_sort(array):
    if len(array) < 2:
        return array
    mid = array[0]
    # leftarray = []
    # rightarray = []
    # for x in array[1:]:
    #     if x >= mid:
    #         rightarray.append(x)
    #     else:
    #         leftarray.append(x)
    # 以上注释部分也可用以下替换
    leftarray = [x for x in array[1:] if x <= mid]
    rightarray = [x for x in array[1:] if x > mid]
    
    return quick_sort(leftarray) + [mid] + quick_sort(rightarray)
array = [7, 5, 96, 2]
print(quick_sort(array))

非递归(C语言风格)
按照c语言修改即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值