码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-16 12:27:07      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:希尔排序   快速排序   算法   

希尔排序源代码如下:

#include <stdio.h>  
//希尔排序 
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<a[j-h]){
				a[j] = a[j-h];j-=h;
			}
			a[j] = v;
		} 
} 
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]);
	shellSort(b,0,length-1);
	int i;
	for(i=0;i<length;i++)
		printf("%d ",b[i]);
} 



快速排序原代码如下:

#include <stdio.h>

//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]<firstKey)
			return i;
	return -1;
}

//快速排序子程序
int partition(int a[],int i,int j,int pivot) {
	int l,r;
	do{
		for(l = i;a[l]<pivot;l++);
		for(r = j;a[r]>=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<length;i++)
		printf("%d ",b[i]);
} 


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

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

标签:希尔排序   快速排序   算法   

原文地址:http://blog.csdn.net/wen942467928/article/details/47700533

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!