C语言(3) - 冒泡排序 归并排序
1.冒泡排序:将相临的两个元素进行比较,直到整个数列有序为止
/*
泡冒排序
比較相臨的兩個元素,直到有序為止
*/
#include "getData.h"
void bubble(int *array)
{
int i;
for(i=ArraySize-1;i>0;i--)
{
int j;
for(j = ArraySize-1;j>ArraySize-i-1;j--)
{
if(array[j]<array[j-1])
{
int tmp = array[j-1];
array[j-1] = array[j];
array[j] = tmp;
}
}
}
}
泡冒排序
比較相臨的兩個元素,直到有序為止
*/
#include "getData.h"
void bubble(int *array)
{
int i;
for(i=ArraySize-1;i>0;i--)
{
int j;
for(j = ArraySize-1;j>ArraySize-i-1;j--)
{
if(array[j]<array[j-1])
{
int tmp = array[j-1];
array[j-1] = array[j];
array[j] = tmp;
}
}
}
}
2,归并排序
/*
归并排序
算法思想是每次把待排序列分成两部分,分别对这两部分递归地用归并排序,
完成后把这两个子部分合并成一个序列。
*/
#include "getData.h"
int CountFlag = 0;
/*
*/
void Merge(int* array,int flow,int middle,int high)
{
int n1 = middle-flow+1; int n2 = high-middle;
int temp1[n1]; int temp2[n2];
int i;
for (i=0; i<n1; i++)
temp1[i] = array[flow+i];
for (i=0; i<n2; i++)
temp2[i] = array[middle+i+1];
int j,k;
for (j=0,k=0,i=flow; i<=high; i++)
{
if (j<n1&&k<n2)
{
if (temp1[j]>=temp2[k])
{
array[i] = temp2[k++];
}
else
{
array[i] = temp1[j++];
}
}
else
{
if(j>=n1&&k<n2)
{
array[i] = temp2[k++];
}
if(j<n1&&k>=n2)
{
array[i] = temp1[j++];
}
}
}
归并排序
算法思想是每次把待排序列分成两部分,分别对这两部分递归地用归并排序,
完成后把这两个子部分合并成一个序列。
*/
#include "getData.h"
int CountFlag = 0;
/*
*/
void Merge(int* array,int flow,int middle,int high)
{
int n1 = middle-flow+1; int n2 = high-middle;
int temp1[n1]; int temp2[n2];
int i;
for (i=0; i<n1; i++)
temp1[i] = array[flow+i];
for (i=0; i<n2; i++)
temp2[i] = array[middle+i+1];
int j,k;
for (j=0,k=0,i=flow; i<=high; i++)
{
if (j<n1&&k<n2)
{
if (temp1[j]>=temp2[k])
{
array[i] = temp2[k++];
}
else
{
array[i] = temp1[j++];
}
}
else
{
if(j>=n1&&k<n2)
{
array[i] = temp2[k++];
}
if(j<n1&&k>=n2)
{
array[i] = temp1[j++];
}
}
}
}