简单选择排序和堆排序问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 08:22:57
写了一个程序用WIN-TC编译老有错误,希望高手帮忙改下,在线等
#include<stdlib.h>
#include<stdio.h>
#include<time.h>

#define datatype int

void SelectSort(datatype R[],int n)
{
int i,k,j;

for(i=1;i<n;i++)
{
k=i;
for(j=i+1;j<=n;j++)
if(R[j]<R[k])
k=j;
if(i!=k)
{
R[0]=R[k];
R[k]=R[i];
R[i]=R[0];
}
}
}

void MSort(RcdType SR[],RcdType &TR1[],int s,int t)
{
if(s==t)TR1[s]=SR[s];
else{
m=(s+t)/2;
MSort(SR,TR2,s,m);
MSort(SR,TR2,m+1,t);
Merge(TR2,TR1,s,m,t);
}
}

void MergeSort(datatype R[],int n)
{
MSort(R,TR1,1,n);
}

void main(void)
{
datatype R[11]={0};
int i;

srand((unsigned)time(NULL));
for(i=1;i<=10;i++)
{
R[i]=rand()%100;
printf("%6d",R[i]);
}
printf("\n");

你那个叫归并排序,我三个都写给你:

#include <stdlib.h>
#include <stdio.h>

void swap(int* a, int* b)
{
int t;
t = *a; *a = *b; *b = t;
}

void show(char* s, int* a, int* b)
{
printf(s);
while(a != b)
printf("%d ", *a++);
putchar('\n');
}

void select_sort(int a[], int n)
{
int i, j, m;
for(i = 0; i < n; ++i) {
m = i;
for(j = i; j < n; ++j)
if(a[m] > a[j])
m = j;
swap(a+i, a+m);
}
}

void merge(int a[], int m, int n)
{
static int s[256];
int i, j, k;
for(i = k = 0, j = m; i < m && j < n;)
if(a[i] > a[j])
s[k++] = a[i++];
else
s[k++] = a[j++];
if(i == m)
i = j, j = n;
else
j = m;
while(i < j)
s[k++] = a[i++];
for(i = 0; i < n; ++i)
a[i] = s[i];
}

voi