![]() |
#2
qq10235692232016-03-02 23:52
![]() using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleTest { class Program { static void Main(string[] args) { int i, j, p, t, k, temp, n = 10, max; int[] a = { 99, 45, 9, 75, 78, 42, 48, 66, 70, 17 }; int[] b = new int[10]; int[] c = new int[10]; int[] d = new int[10]; for (i = 0; i < n; i++) c[i] = 0; for (i = 0; i < n; i++) b[i] = a[i]; t = n; while (t!=0) { i = p = t; k = 1; for (i = 0; i < t; i++) d[i] = i; while (i!=0) { i = i / 2; k = 2 * k; } k = k / 2; while (k!=0) { for (i = 0, j = p - 1; i < k; i++, j--) { if (b[i] > b[j]) { c[i] = d[i]; } else { c[i] = d[j]; } } for (j = 0; j < k; j++) { i = c[j]; b[j] = a[i]; } for (j = 0; j < k; j++) d[j] = c[j]; k = k / 2; p = (p + 1) / 2; } max = c[0]; if (a[max] > a[t-1]) { temp = a[max]; a[max] = a[t-1]; a[t-1] = temp; } for (i = 0; i < n; i++) b[i] = a[i]; t--; } for (i = 0; i < n; i++) Console.Write("{0},", a[i]); Console.ReadKey(); } } } [此贴子已经被作者于2016-3-2 23:55编辑过] |

#include"stdio.h"
void main()
{
int i,j,p,t,k,temp,n=10,max;
int a[10]={99,45,9,75,78,42,48,66,70,17};
int b[10],d[10];
int c[10];
for(i=0;i<n;i++)
c[i]=0;
for(i=0;i<n;i++)
b[i]=a[i]; //拷贝中间数组
t=n;
while(t) //n趟记序排序
{
i=p=t;
k=1;
for(i=0;i<t;i++)
d[i]=i; //分配数组元素初始序号
while(i)
{
i=i/2;
k=2*k;
}
k=k/2;
while(k) //logn次稍大数比较
{
for(i=0,j=p-1;i<k;i++,j--)
{
if(b[i]>b[j])
{
c[i]=d[i];
}
else
{
c[i]=d[j];
}
}
for(j=0;j<k;j++) //记住元素的序号
{
i=c[j];
b[j]=a[i];
}
for(j=0;j<k;j++)
{
d[j]=c[j];
}
k=k/2;
p=(p+1)/2;
}
max=c[0];
if(a[max]>a[t-1]) //将最大元素放入序列最后
{
temp=a[max];
a[max]=a[t-1];
a[t-1]=temp;
}
for(i=0;i<n;i++)
b[i]=a[i];
t--;
}
for(i=0;i<n;i++)
printf("%d,",a[i]);
}