希尔排序算法和快速排序算法

希尔排序源代码如下:

#include   
//希尔排序 
void shellSort(int a[],int l, int r){  //一次排序同一步长所组成的集合 如a[0],a[5],a[10]... 
	int i,j,h;
	for(h=1;h<=(r-1)/9;h=3*h+1); //设置步长为1,4,13,40,121,...序列 
	for( ; h>0;h/=3)
		for(i=h;i<=r;i++){
			int j = i;int v = a[i];
			while(j>=h && v



快速排序原代码如下:

#include 

//int a[16] = {10,7,12,25,8,9,11,71,82,90,1,14,99,7,456,1};
//快速排序子程序
int findPivot(int a[],int i,int j){
	int firstKey = a[i];
	int k;
	for(k=i+1;k<=j;k++)
		if(a[k]>firstKey)
			return k;
		else if(a[k]=pivot;r--);
		if(l < r){
			int t = a[l]; a[l]=a[r];a[r]=t;
		}
	}while(l<=r);
	return l;
}

//快速排序主程序
void quickSort(int a[],int i,int j){
	int pivot; //划分的基准;
	int k ; //关键字大于等于pivot的记录在序列中的起始下标 
	int pivotIndex;
	pivotIndex = findPivot(a,i,j);
	if(pivotIndex!=-1){ //递归终止条件 
		pivot = a[pivotIndex];
		k = partition(a,i,j,pivot) ;
		quickSort(a,i,k-1);
		quickSort(a,k,j);
	} 
} 

//-----------------以上是快速排序的一种实现-------------------// 

//快速排序 改进版 
void quick_sort(int s[], int l, int r)
{
    if (l < r)
    {
        int i = l, j = r, x = s[l];
        while (i < j)
        {
            while(i < j && s[j] >= x) 
				j--;  
            if(i < j) 
				s[i++] = s[j];
			
            while(i < j && s[i] < x) 
				i++;  
            if(i < j) 
				s[j--] = s[i];
        }
        s[i] = x;
        quick_sort(s, l, i - 1); 
        quick_sort(s, i + 1, r);
    }
}


main(){
	int b[16] = {10,7,12,25,8,9,11,71,82,90,1,14,99,7,456,1};
	int length = sizeof(b)/sizeof(b[0]);
	quickSort(b,0,length-1);
	int i;
	for(i=0;i


你可能感兴趣的:(算法学习积累)