一、2016年43题解析
* 代码实战:
#include <stdio.h>
int setPartition(int A[],int n)
{
int i,s1=0,s2=0,low=0,high=n-1,low0=low,high0=high,save_element,tag=1,k=(n-1)/2; //这里注意搞错了,是(n-1)/2
while(tag)
{
save_element = A[low];
while (low < high)
{
while (low < high && A[high] >= save_element)
{
high--;
}
if(low!=high) //这里要加一个判断语句,确保是A[low]>save_element而不是第一个结束条件导致的
{
A[low] = A[high];
}
while (low < high && A[low] <= save_element)
{
low++;
}
if(low!=high) //这里要加一个判断语句,确保是A[low]>save_element而不是第一个结束条件导致的
{
A[high] = A[low];
}
}
A[low] = save_element; //快排一次结束
if (low==k)
{
tag=0;
}else if(low<k)
{
low0=++low;
high=high0;
}else{
low=low0;
high0=--high;
}
}
for(i=0;i<=k;i++)
{
s1+=A[i];
}
for(i=k+1;i<n;i++)
{
s2+=A[i];
}
return s2-s1;
}
int main() {
int A[9]={4,1,12, 18, 7,13, 16, 2, 15 };
int backValue;
backValue=setPartition(A,9);
printf("%d\n", backValue);
return 0;
}
二、2022年42题解析
* 代码实战:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void InitArray(int M[],int length)
{
srand(time(NULL));
for(int i=0;i<length;i++)
{
M[i]=rand();
}
}
void swamp(int &a,int &b)
{
int temp=b;
b=a;
a=temp;
}
void AdjustDown(int M[],int i,int length)
{
int father=i;
int son=2*father+1;
while(son<=length-1)
{
if(son+1<=length-1 && M[son]<M[son+1])
{
son++;
}
if(M[father]<M[son])
{
swamp(M[father],M[son]);
father=son;
son=2*father+1;
}else{
break;
}
}
}
void HeapSort(int M[],int length)
{
int i;
for(i=(length/2)-1;i>=0;i--) //对前10个元素调整为大根堆
{
AdjustDown(M,i,length);
}
for(i=10;i<100;i++)
{
if(M[i]<=M[0])
{
M[0]=M[i];
AdjustDown(M,0,length);
}else{
continue;
}
}
}
int main () {
int M[100]={0};
InitArray(M,100);
// int k=1;
// for(int i=0;i<10;i++)
// {
// M[i]=k+1;
// k++;
// }
HeapSort(M,10);
return 0;
}