山谷序列C语言,重温经典排序思想--C语言常用排序全解(转载--值得一看)

void select_sort(int *x, int n)

{

int i, j, min, t;

for (i=0; i

{

min = i;

for (j=i+1;

j

{

if (*(x+j)

< *(x+min))

{ min = j;

}

} if (min != i)

{

t =

*(x+i);

*(x+i) =

*(x+min);

*(x+min) =

t;

}

}

}

void insert_sort(int *x, int n)

{

int i, j, t;

for (i=1; i

{

t=*(x+i);

for (j=i-1;

j>=0 &&

t

{

*(x+j+1) =

*(x+j);

}

*(x+j+1) = t;

}

}

void bubble_sort(int *x, int n)

{

int j, k, h, t;

for (h=n-1; h>0; h=k)

{

for (j=0, k=0;

j

{

if (*(x+j)

> *(x+j+1))

{

t = *(x+j);

*(x+j) = *(x+j+1);

*(x+j+1) = t;

k = j;

}

}

}

}

void shell_sort(int *x, int n)

{

int h, j, k, t;

for (h=n/2; h>0; h=h/2)

{

for (j=h; j

j++)

{

t =

*(x+j);

for (k=j-h;

(k>=0 &&

t

{

*(x+k+h) = *(x+k);

}

*(x+k+h) =

t;

}

}

}

void quick_sort(int *x, int low, int high)

{

int i, j, t;

if (low < high)

{

i = low;

j = high;

t = *(x+low);

while

(i

{

while

(i

*(x+j)>t)

{

j--;

}

if

(i

{

*(x+i) = *(x+j);

i++;

}

while

(i

*(x+i)<=t)

{

i++;

}

if

(i

{

*(x+j) = *(x+i);

j--;

}

}

*(x+i) = t;

quick_sort(x,low,i-1); quick_sort(x,i+1,high); }

}

void sift(int *x, int n, int s)

{

int t, k, j;

t = *(x+s);

k = s; j = 2*k + 1;

while (j

{

if (j

&& *(x+j) <

*(x+j+1))

{

j++;

}

if

(t

{

*(x+k) =

*(x+j);

k = j;

j = 2*k +

1;

}

else

{

break;

}

}

*(x+k) = t;

}

void heap_sort(int *x, int n)

{

int i, k, t;

int *p;

for (i=n/2-1; i>=0; i--)

{

sift(x,n,i);

}

for (k=n-1; k>=1; k--)

{

t = *(x+0);

*(x+0) = *(x+k);

*(x+k) = t;

sift(x,k,0);

}

}

void main()

{

#define MAX 4

int *p, i, a[MAX];

p = a;

printf("Input %d number for sorting :\n",MAX);

for (i=0; i

{

scanf("%d",p++);

}

printf("\n");

p = a;

select_sort(p,MAX);

for (p=a, i=0; i

{

printf("%d ",*p++);

}

printf("\n");

system("pause");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值