生物医学信号处理作业快速排序法:
齐毅松 U200912446 生医 0903
原数据:
英语 62
数学 99
排完后数据
英语 21
数学 77
91
37
58
43
68
65
48
37
74
58
84
62
91
37
74
58
84
21
77
62
42
37
58
62
91
43
68
62
99
62
42
65
42
77
56
77
56
代码:C++
#include
#include
#include
//快速排序
void QuickSort(int *data,int *datax,int x,int y)
{
int p=x,q=y-1,temp;//p,q 分别指向数组首尾,以首位数据为基准划分
while(q>p)//表示至少 2 个元素
{
while (q>p&&data[q]>=data[p])
q--;
if (q>p)
{
temp = data[p],data[p] = data[q],data[q] =temp;
temp = datax[p],datax[p] = datax[q],datax[q] =temp;
p++;
}
while(q>p&&data[p]<=data[q])
p++;
if (q>p)
{
temp = data[p],data[p] = data[q],data[q] =temp;
temp = datax[p],datax[p] = datax[q],datax[q] =temp;
q--;
}
if (p==q)//基准点位置
{
QuickSort(data,datax,x,p);//分别对基点前、后半部分进行快速排序
QuickSort(data,datax,p+1,y);
}
}
}
void sort(int *data,int *datax)
{
int i;
int tem;
for(i=0;i<10;i++)
{if(data[i]==data[i+1])
{if(datax[i]>datax[i+1])
{tem = datax[i],datax[i] = datax[i+1],datax[i+1] =tem;
sort(data,datax);
}
}
}
}
void print(int *data,int *datax)
{
int i;
printf("\n");
printf("英语");
printf("数学");
for (i=0;i<10;i++)//输出未排序数据
{
printf("\n");
printf(" %d ",data[i]);
printf(" %d ",datax[i]);
}
printf("\n");
system("pause");
}
int main()
{
int data[10] ={62,58,65,62,37,21,37,43,62,77};
int datax[10]={99,84,48,91,74,77,58,68,42,56};
int temp[10];
printf("未排序数据为 :");
print(data,datax);
QuickSort(data,datax,0,10);
printf("英语排完为:");
print(data,datax);
sort(data,datax);
printf("英语数学全排完为:");
print(data,datax);
}