详细设计见代码说明: #include <stdio.h> #define KeyType int typedef struct _SeqList { KeyType key; }SeqList; int BinSearch( SeqList R[],KeyType K ) { // 在有序表R[1..n]中进行二分查找,成功时返回结点的位置,失败时返回零 int low = 1, high = 10, mid;// 置当前查找区间上、下界的初值 while( low <= high ) { // 当前查找区间R[low..high]非空 mid = ( low + high ) / 2; if( R[mid].key == K ) { return mid; // 查找成功返回 } if( R[mid].key > K ) { high = mid - 1; // 继续在R[low..mid-1]中查找 } else { low = mid + 1; // 继续在R[mid+1..high]中查找 } } return 0; // 当low > high时表示查找区间为空,查找失败 } // BinSeareh int Partition( SeqList R[], int i, int j) {// 调用Partition(R,low,high)时,对R[low..high]做划分, // 并返回基准记录的位置 SeqList pivot = R[i]; // 用区间的第1个记录作为基准 ' while( i < j ) { // 从区间两端交替向中间扫描,直至i=j为止 while( i < j && R[j].key >= pivot.key ) // pivot相当于在位置i上 { j--; // 从右向左扫描,查找第1个关键字小于pivot.key的记录R[j] } if( i < j ) // 表示找到的R[j]的关键字<pivot.key { R[i++] = R[j]; // 相当于交换R[i]和R[j],交换后i指针加1 } while( i < j && R[i].key <= pivot.key ) // pivot相当于在位置j上 { i++; // 从左向右扫描,查找第1个关键字大于pivot.key的记录R[i] } if( i < j ) // 表示找到了R[i],使R[i].key>pivot.key { R[j--] = R[i]; // 相当于交换R[i]和R[j],交换后j指针减1 } } // endwhile R[i]=pivot; // 基准记录已被最后定位 return i; } // partition void QuickSort( SeqList R[], int low, int high ) { //对R[low..high]快速排序 int pivotpos; // 划分后的基准记录的位置 if( low < high ) { // 仅当区间长度大于1时才须排序 pivotpos = Partition( R, low, high ); // 对R[low..high]做划分 QuickSort( R, low, pivotpos - 1 ); // 对左区间递归排序 QuickSort( R, pivotpos + 1, high ); // 对右区间递归排序 } } //QuickSort int main() { SeqList arr_Seq[10]; for( int i = 0; i < 10; i++ ) { arr_Seq[i].key = i + 2; } printf("6 location:%d/n",BinSearch( arr_Seq, 6 )); arr_Seq[0].key = 5; arr_Seq[1].key = 2; arr_Seq[2].key = 6; arr_Seq[3].key = 7; arr_Seq[4].key = 3; arr_Seq[5].key = 12; arr_Seq[6].key = 56; arr_Seq[7].key = 0; arr_Seq[8].key = 15; arr_Seq[9].key = 22; QuickSort( arr_Seq, 0, 9 ); for( int i = 0; i < 10; i++ ) { printf("%d/t",arr_Seq[i].key); } getchar(); return 0; }#include <stdio.h> #define KeyType 你的当前访问异常,请进行认证后继续阅读剩余内容。 提交