简单选择排序和堆排序问题
来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/27 14:25:44
简单选择排序和堆排序问题
写了一个程序用WIN-TC编译老有错误,希望高手帮忙改下,在线等
#include
#include
#include
#define datatype int
void SelectSort(datatype R[],int n)
{
int i,k,j;
for(i=1;i
写了一个程序用WIN-TC编译老有错误,希望高手帮忙改下,在线等
#include
#include
#include
#define datatype int
void SelectSort(datatype R[],int n)
{
int i,k,j;
for(i=1;i
你那个叫归并排序,我三个都写给你:
#include
#include
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];
}
void merge_sort(int a[],int n)
{
int m;
if(n < 2)
return;
m = n/2;
merge_sort(a,m);
merge_sort(a+m,n-m);
merge(a,m,n);
}
void heapify(int a[],int i,int n)
{
int l,r,m;
while(1) {
r = (i + 1)*2;
l = r - 1;
m = l < n && a[l] > a[i] l :i;
m = r < n && a[r] > a[m] r :m;
if(m != i)
swap(a+i,a+m),i = m;
else break;
}
}
void heap_sort(int a[],int n)
{
int i;
for(i = (n-1)/2; i >= 0; --i)
heapify(a,i,n);
for(i = n-1; i > 0; --i) {
swap(a,a+i);
heapify(a,0,--n);
}
}
int main()
{
int a[] = {6,1,3,8,4,0,9,7,5,2};
select_sort(a,10);
show("选择排序:\t",a,a+10);
merge_sort(a,10);
show("归并排序:\t",a,a+10);
heap_sort(a,10);
show("堆排序:\t\t",a,a+10);
return 0;
}
#include
#include
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];
}
void merge_sort(int a[],int n)
{
int m;
if(n < 2)
return;
m = n/2;
merge_sort(a,m);
merge_sort(a+m,n-m);
merge(a,m,n);
}
void heapify(int a[],int i,int n)
{
int l,r,m;
while(1) {
r = (i + 1)*2;
l = r - 1;
m = l < n && a[l] > a[i] l :i;
m = r < n && a[r] > a[m] r :m;
if(m != i)
swap(a+i,a+m),i = m;
else break;
}
}
void heap_sort(int a[],int n)
{
int i;
for(i = (n-1)/2; i >= 0; --i)
heapify(a,i,n);
for(i = n-1; i > 0; --i) {
swap(a,a+i);
heapify(a,0,--n);
}
}
int main()
{
int a[] = {6,1,3,8,4,0,9,7,5,2};
select_sort(a,10);
show("选择排序:\t",a,a+10);
merge_sort(a,10);
show("归并排序:\t",a,a+10);
heap_sort(a,10);
show("堆排序:\t\t",a,a+10);
return 0;
}
简单选择排序和堆排序问题
关于选择排序和堆排序为什么说选择排序中比较的次数与初始的顺序无关而堆排序与初始顺序有关?
下列排序方法中,最坏情况下比较次数最少的是()为什么 A)冒泡排序 B)简单选择排序 C)直接插入排序 D)堆
利用随机函数产生30000个随机整数,利用插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序等排序方法进
503,087,512,908,170,897,275,653,462冒泡排序、快速排序、直接选择排序、堆排序、归并排序
下面的排方法中,最坏的情况下比较次数最少的是( ) A冒泡排序 B简单选择排序 C直接插入排序 D 堆排序
冒泡排序和选择排序有什么区别,
急!简单的句子排序问题!
求大神解答选择排序问题
排序
对同一个基本有序的待排序列分别进行堆排序、快速排序和冒泡排序,最省时间的算法是___________
急,简单选择排序题写出下列序列每趟简单选择排序的结果:70.83.100.65.10.32.7.9.