您的位置:首页 > 其它

快速、及希尔排序

2015-07-29 17:19 232 查看
//快速排序

void swap(int *a,int p,int q)//交换数组两个值

{

int temp;

temp = a[p];

a[p] = a[q];

a[q] =temp;

}

void qsort(int *a,int left,int right)

{

if(left >= right)//小于两个时返回

return;

int mid = (left + right)/2;//取中间的值为比较值

swap(a,mid,left);//将比较值放到最前面

int last = left;//last为小于比较值的一半的最右边一个数

for(int i = left + 1;i <= right;i++)

{

if(a[i] <= a[left])

{

swap(a,++last,i);

}

}

swap(a,left,last);将比较值放回去

qsort(a,left,last-1);

qsort(a,last+1,right);

}

//希尔排序

void swap(int *a,int p,int q)

{

int temp;

temp = a[p];

a[p] = a[q];

a[q] =temp;

}

void shellpass(int *a,int n,int d)//间隔为d的插入排序;

{

int temp;

int j;

for(int i = d;i < n;i++)

{

temp = a[i];

j = i - d;

while(j >= 0 && temp < a[j])

{

a[j+d] = a[j];

j -= d;

}

a[j+d] = temp;

}

}

void shellsort(int *a,int n)//最后d必须收敛到1;

{

int d = 12;

do

{

d = d/2;

shellpass(a,n,d);

}while(d>1);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: