int It;/小于该记录的个数 } place;/整个序列中比某个关键字大或小的记录个数 int get mid(nta[intn)求一个序列的中值记录的位置 place b IMAXSIZEI; for(i=0<n计+)/对每一个元素统计比它大和比它小的元素个数gt和t for(=;j<n; j++) if(alPa)b[gt++ else if(alka)b0. It++ mid=0 min dif=abs(b[0].gt-b[0].It) for(i=0;in;计+)∥找出gt值与t值最接近的元素,即为中值记录 if(abs(b]gt-b[].It <min dif)mid=i, return mid i//Get Mid 1043 void Count Sort(int a[ I, int n y计数排序算法 int cMAXSIZEI; for(i=0in计+)∥付每一个元素 for(j=0 count=0jnj+)∥统计关键字比它小的元素个数 if(alka)count++ ccount; for(i=0isn;计+)∥依次求出关键字最小第二小,,最大的记录 min=0 for(0: j<n: j++) if(cL]<c[min)min,∥求出最小记录的下标min a[]->a[min,∥与第i个记录交换 c[min]=ⅠNFⅠNITY;∥修改该记录的c值为无穷大以便下一次选取 3//Count Sort 104 void Enum Sort(int a[ l, int n)对关键字只能取ⅴ到w之间任意整数的序列进行排 序int lt; //小于该记录的个数 } place; //整个序列中比某个关键字大或小的记录个数 int Get_Mid(int a[ ],int n)//求一个序列的中值记录的位置 { place b[MAXSIZE]; for(i=0;i<n;i++) //对每一个元素统计比它大和比它小的元素个数 gt 和 lt for(j=0;j<n;j++) { if(a[j]>a[i]) b[i].gt++; else if(a[j]<a[i]) b[i].lt++; } mid=0; min_dif=abs(b[0].gt-b[0].lt); for(i=0;i<n;i++) //找出 gt 值与 lt 值最接近的元素,即为中值记录 if(abs(b[i].gt-b[i].lt)<min_dif) mid=i; return mid; }//Get_Mid 10.43 void Count_Sort(int a[ ],int n)//计数排序算法 { int c[MAXSIZE]; for(i=0;i<n;i++) //对每一个元素 { for(j=0,count=0;j<n;j++) //统计关键字比它小的元素个数 if(a[j]<a[i]) count++: c[i]=count; } for(i=0;i<n;i++) //依次求出关键字最小,第二小,...,最大的记录 { min=0; for(j=0;j<n;j++) if(c[j]<c[min]) min=j; //求出最小记录的下标 min a[i]<->a[min]; //与第 i 个记录交换 c[min]=INFINITY; //修改该记录的 c 值为无穷大以便下一次选取 } }//Count_Sort 10.44 void Enum_Sort(int a[ ],int n)//对关键字只能取 v 到 w 之间任意整数的序列进行排 序 {