zoukankan      html  css  js  c++  java
  • 排序之快排

    排序之快速排序

    快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。

    步骤

    1.从数列中挑出一个元素,称为 "基准"(pivot)
    2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割结束之后,该基准就处于数列的中间位置。这个称为分割(partition)操作。
    3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。递归到最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递回下去,但是这个演算法总会结束,因为在每次的迭代中,它至少会把一个元素摆到它最终的位置去。

    伪代码

    function quicksort(q)
         var list less, pivotList, greater
         if length(q) ≤ 1 {
             return q
         } else {
             select a pivot value pivot from q
             for each x in q except the pivot element
                 if x < pivot then add x to less
                 if x ≥ pivot then add x to greater
             add pivot to pivotList
             return concatenate(quicksort(less), pivotList, quicksort(greater))
         }
    
    

    c实现

    #include<stdio.h>
    void swap(int *a,int *b)
    {
    	int temp;
    	temp=*a;
    	*a=*b;
    	*b=temp;
    }
    void quicksort(int a[],int left,int right)
    {
        int last,i;
    	int pivot=a[left];
    	if(left>=right)
    	  return;
    	last=left;
    	for(i=left+1;i<=right;i++)
    	  if(pivot>a[i])
    		swap(&a[++last],&a[i]);
    	swap(&a[left],&a[last]);
    	quicksort(a,left,last-1);
    	quicksort(a,last+1,right);
    }
    int main()
    {
    	int i;
    	int a[]={1,5,7,2,4,6,9,8,4,2};
    	quicksort(a,0,9);
    	for(i=1;i<=9;i++)
    	  printf("%d ",a[i]);
    	printf("\n");
    }
    
    
    
  • 相关阅读:
    你好,明天
    一句话实现星级评价
    react路由
    react插件包
    react 组件列表
    css小demo
    react的项目坑
    配置react-sass
    node-sass下载失败 关于webpack
    react render
  • 原文地址:https://www.cnblogs.com/battzion/p/4162065.html
Copyright © 2011-2022 走看看