{
int ARRAY[LEN]={ 5, 6, 8, 2, 4, 1, 9, 3, 7 }; //待序数组 printf(\
for( int m = 0; m < LEN; m++ ) //打印排序前数组 {
printf( \}
for (int i = 1; i <= LEN - 1; i++) //{
int t = i - 1; int temp = 0;
for (int j = i; j < LEN; j++) {
if (ARRAY[j] < ARRAY[t]) { t = j; } }
if (t != (i - 1)) {
temp = ARRAY[i - 1]; ARRAY[i - 1] = ARRAY[t];
选择排序 ARRAY[t] = temp; } }
printf( \
printf(\
for( i = 0; i < LEN; i++ ) //打印排序后数组 {
printf( \}
printf( \}
注意:在直接选择排序中,具有相同关键码的对象可能会颠倒次序,因而直接选择排序算法是一种
不稳定的排序方法。在本例中只是例举了简单的整形数组排序,肯定不会有什么问题。但是在复杂的数
据元素序列组合中,只是根据单一的某一个关键值排序,直接选择排序则不保证其稳定性,这是直接选
择排序的一个弱点。 面试题 27: 编程实现堆排序 堆排序编程实现: #include
void createHeep(int ARRAY[],int sPoint, int Len) //生成大根堆
{
while( ( 2 * sPoint + 1 ) < Len ) {
int mPoint = 2 * sPoint + 1 ; if( ( 2 * sPoint + 2 ) < Len ) {
if(ARRAY[ 2 * sPoint + 1 ] < ARRAY[ 2 * sPoint + 2 ] ) {
mPoint = 2*sPoint+2; } }
if(ARRAY[ sPoint ] < ARRAY[ mPoint ]) //堆被破坏,需要重新调整 {
int tmpData= ARRAY[ sPoint ]; //交换 sPoint 与 mPoint 的数据 ARRAY[ sPoint ] = ARRAY[ mPoint ]; ARRAY[ mPoint ] = tmpData; sPoint = mPoint ; } else {
break; //堆未破坏,不再需要调整
} } return; }
void heepSort( int ARRAY[], int Len ) //堆排序 { int i=0;
for ( i = ( Len / 2 - 1 ); i >= 0; i-- ) //将 Hr[0, Lenght-1]建成大根堆 {
createHeep(ARRAY, i, Len); }
for ( i = Len - 1; i > 0; i-- ) {
int tmpData = ARRAY[0]; //与最后一个记录交换 ARRAY[0] = ARRAY[i]; ARRAY[i] = tmpData;
createHeep( ARRAY, 0, i ); //将 H.r[0..i]重新调整为大根堆 } return; }
int main( void )
15 {
int ARRAY[] ={ 5, 4, 7, 3, 9, 1, 6, 8, 2}; printf(\打印排序前数组内容 for ( int i = 0; i < 9; i++ ) {
printf(\}
printf(\
heepSort( ARRAY, 9 ); //堆排序
printf(\打印排序后数组内容 for( i = 0; i < 9; i++ ) {
printf( \}
printf( \return 0; }
说明:堆排序,虽然实现复杂,但是非常的实用。另外读者可是自己设计实现小堆排序的算法。虽
然和大堆排序的实现过程相似,但是却可以加深对堆排序的记忆和理解。 面试题 28: 编程实现基数排序
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C和C++经典面试题(面试必备)(6)在线全文阅读。
相关推荐: