zoukankan      html  css  js  c++  java
  • 快速排序(C语言实现) 分类: 数据结构 2014-12-07 14:56 127人阅读 评论(0) 收藏




    #include "sort.h"
    
    void Quick(int* arr,int low,int high);
    int FindPos(int* arr,int low,int high);
    int main(void)
    {
    	int arr[]={-1,1,-2,2,3,3,-4};
    	Print(arr,7);
    	Quick(arr,0,6);
    	Print(arr,7);
    
    	return 0;
    }
    
    void Quick(int* arr,int low,int high)
    {
    	int pos;
    	if(low<high)
    	{
    		pos=FindPos(arr,low,high);//找出合适的位置,将数组分为两部分比较
    		Quick(arr,low,pos-1); //从low处开始,pos-1结束,因为pos的位置已经找到了,再将数组分为两部分比较,一直下去
    		Quick(arr,pos+1,high); //从pos+1处开始,higt结束,因为pos的位置已经找到了,再将数组分为两部分比较,一直下去
    	}
    }
    
    //找出合适的位置
    int FindPos(int* arr,int low,int high)
    {
    	int val=arr[low];//现假设low,为最小值的下标,保存起来
    	while(low<high)
    	{
    		while(low<high && val<=arr[high]) //判断条件
    			high--;
    		arr[low]=arr[high];
    		while(low<high && val>=arr[low])
    			low++;
    		arr[high]=arr[low];
    	}
    	arr[low]=val;
    	return low;
    }
    
    //头文件 内容
    #include <stdio.h>
    
    void Print(int* arr,int len)
    {
        int i;
        for(i=0;i<len;i++)
        {
            printf("%d ",arr[i]);
        }
        printf("
    ");
    }
    
    void Swap(int* a,int* b)
    {
        *a=*a+*b;
        *b=*a-*b;
        *a=*a-*b;
    }
    
    
    


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    codevs1288 埃及分数
    codevs1792 分解质因数
    dp
    JAVA大数贪心
    求最长不重叠子串
    初识后缀数组
    dp
    两数相除,判断小数位是否有限位
    构造二分图匹配
    建立多个树状数组
  • 原文地址:https://www.cnblogs.com/L-Lune/p/4671292.html
Copyright © 2011-2022 走看看