今天给各位分享c语言归并排序过程的知识,其中也会对c语言合并排序算法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、输入一组整数对该序列进行简单选择和归并排序(数据结构用c语言写啊)2、高分送!!如何用C语言实现归并排序算法!!!3、用c语言编写归并排序代码,要求易懂,本人只是c语言的初学者,越简单越好。4、谁能给个简单的C语言归并排序算法的例子啊?谢谢
输入一组整数对该序列进行简单选择和归并排序(数据结构用c语言写啊)
给你一个归并排序的具体算法和分析:
两路归并排序算法思路:
①.
把n个记录看成n个长度为l的有序子表
;
②.
进行两两归并使记录关键字有序,得到n/2个长度为2的有序子表;
③.
重复第②步直到所有记录归并成一个长度为n的有序表为止;
具体算法:
//
归并操作
template
static
void
merge
(typearray[],
int
p,
int
q,
int
r){
int
i
,
k
;
int
begin1
,
end1
,
begin2
,
end2
;
int*
temp
=
(int*)malloc((r-p)*sizeof(int))
;
begin1
=
p
;
end1
=
q
;
begin2
=
q+1
;
end2
=
r
;
k
=
;
while
(begin1
=
end1
begin2
=
end2){
if
(array[begin1]
array[begin2]){
temp[k]
=
array[begin1]
;
begin1
++
;
}
else{
temp[k]
=
array[begin2]
;
begin2
++
;
}
k
++
;
}
while
(begin1
end1)
temp[k++]
=
array[begin1++]
;
while
(begin2
end2)
temp[k++]
=
array[begin2++]
;
for
(i
=
;
i
(r-p)
;
i
++)
array[p+i]
=
temp
;
free(temp)
;
}
//——————————————————————————–
template
void
mergesort(typearray[],
unsigned
int
first,
unsigned
int
last){
int
mid
=
;
if
(first
last)
{
mid
=
(first+last)/2
;
mergesort
(array,
first,
mid)
;
mergesort
(array,
mid+1,
last)
;
merge
(array,
first,
mid,
last)
;
}
}
高分送!!如何用C语言实现归并排序算法!!!
#include iostream
using namespace std;
void merge(int array[],int left,int right)
{
int temparray[right];
for(int j=left;j=right;j++)
{
temparray[j]=array[j];
}
int middle=(left+right)/2;
int index1=left;
int index2=middle+1;
int i=left;
while((index1=middle)(index2=right))
{
if(temparray[index1]temparray[index2]) array[i++]=temparray[index1++];
else array[i++]=temparray[index2++];
}
while(index1=middle) array[i++]=temparray[index1++];
while(index2=right) array[i++]=temparray[index2++];
}
void sort(int array[],int left,int right)
{
if(leftright)
{
int middle=(left+right)/2;
sort(array,left,middle);
sort(array,middle+1,right);
merge(array,left,right);
}
}
这个不是特别的完美,但是大体上就是这么个思路啦~而且因为语法不严谨,貌似只能在c++下运行~建议看看youku上的数据结构课,然后你就会发现全明白了~
如果在c语言下运行,int temparray[right];这句话里面的right要改成你需要用的数~
用c语言编写归并排序代码,要求易懂,本人只是c语言的初学者,越简单越好。
//#includeiostream
//
//using namespace std;
//
//void Guibing(int*arr,int low,int high)
//{
// int m_Begin1 = low;
// int m_End1 = (low+high)/2;
// int m_Begin2 = m_End1+1;
// int m_End2 = high;
//
// int* temp = new int[high-low+1];
// //申请一个这两组的空间
// //要看 只要有一组到结尾就要结束
// int k=0;
// for (;m_Begin1 = m_End1 m_Begin2 = m_End2;k++)
// {
// // 然后找小的往里存
// if (arr[m_Begin1] arr[m_Begin2])
// {
// temp[k] = arr[m_Begin1];
// m_Begin1++;
// }
// else
// {
// temp[k] = arr[m_Begin2];
// m_Begin2++;
// }
// }
//
// //如果第一组没到结尾 顺序存
// while(m_Begin1 = m_End1)
// {
// temp[k] = arr[m_Begin1];
// k++;
// m_Begin1++;
// }
// //如果第二组没到结尾 顺序存
// while(m_Begin2 = m_End2)
// {
// temp[k] = arr[m_Begin2];
// k++;
// m_Begin2++;
// }
// //把已经排好序的 temp 放回到原来对应的位置
// for (k = 0;khigh-low+1;k++)
// {
// arr[low+k] = temp[k];
// }
// delete[] temp;
//}
//
//void Digui(int*arr,int low,int high)
//{
// if (low high)
// {
// int mid = (low+high)/2;
// Digui(arr,low,mid);
// Digui(arr,mid+1,high);
// Guibing(arr,low,high);
// }
//}
//
//int main()
//{
// int arr[10] = {9,11,5,3,17,13,1,17,25,8};
//
// Digui(arr,0,9);
//
// for (int i =0 ;i10;i++)
// {
// cout arr[i] ” “;
// }
//
// system(“pause”);
// return 0;
//}
谁能给个简单的C语言归并排序算法的例子啊?谢谢
#includeiostream.h
#includeiomanip.h
#includestdlib.h
#includetime.h
#define M 11
typedef int KeyType;
typedef int ElemType;
struct rec
{
KeyType key;ElemType data;
};
typedef rec sqlist[M];
void output( sqlist r, int n )
{
for ( int i = 0; i n; i++ )
{
cout setw( 4 ) r[i].key;
}
cout endl;
}
void xuanze( sqlist b, int m, int n )
{
int i, j, k;
for ( i = m; i n – 1; i++ )
{
k = i;
for ( j = i; j n; j++ )
{
if ( b[k].key b[j].key )
{
k = j;
}
}
if ( k != i )
{
rec temp = b[k];
b[k] = b[i];b[i] = temp;
}
}
}
void merge( sqlist r, int l, int m, int h, sqlist r2 )
{
xuanze( r, l, m );
xuanze( r, m, h );
output( r, M );
int i, j, k;
k = i = l;
for ( j = m; i m j h; k++ )
{
if ( r[i].key = r[j].key )
{
r2[k] = r[i];i++;
}
else
{
r2[k] = r[j];j++;
}
output( r2, M );
}
while ( j h )
{
r2[k] = r[j];j++;k++;
}
while ( i = m )
{
r2[k] = r[i];i++;k++;
}
output( r2, M );
}
void main()
{
cout “guibingfa2.cpp运行结果:\n”;
sqlist a, b;int i, j = 0, k = M / 2, n = M;
srand( time( 0 ) );
for ( i = 0; i M; i++ )
{
a[i].key = rand() % 80;b[i].key = 0;
}
cout “排序前数组:\n”;
output( a, M );
cout “数组排序的过程演示:\n”;
merge( a, j, k, n, b );
cout “排序后数组:\n”;
output( b, M );cin.get();
}
c语言归并排序过程的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言合并排序算法、c语言归并排序过程的信息别忘了在本站进行查找喔。