快速排序原理O(n*log)

    快速排序是一种基于分治策略的算法,可以利用基准条件与递归挖坑实现:
    1.i =L; j = R; 将基准数挖出形成第一个坑a[i]。
    2.j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。
    3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。
    4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。
    在i这个位置中i前面得的数均比i序列所在值小,i后面的数均比i序列所在值大
    那么根据递归思想对l到i-1,i+1到r进行分别递归排序即可。
#include<stdio.h>

void quick_sort(int s[], int l, int r)  
{  
    if (l < r)  
    {  
        //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1  
        int i = l, j = r, x = s[l];  
        while (i < j)  
        {  
            while(i < j && s[j] >= x) // 从右向左找第一个小于x的数  
                j--;    
            if(i < j)   
                s[i++] = s[j];  
              
            while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数  
                i++;    
            if(i < j)   
                s[j--] = s[i];  
        }  
        s[i] = x;  
        quick_sort(s, l, i - 1); // 递归调用   
        quick_sort(s, i + 1, r);  
    }  
} 
 
 int main()
 {
 	int a[10]={4,76,34,56,33,98,12,27,78};
 	quick_sort(a,0,9);
 	for(int i=0;i<10;i++)
	 {
	 	printf("%d\t",a[i]);
	  } 
 	return 0;
 }

猜你喜欢

转载自blog.csdn.net/qq_41879767/article/details/82794208