希尔排序源代码如下:
#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