转瞬以至大二。看着同寝的室友在短短的大一一年里代码水平就提升至难以企及的高度,自己也想着要上进了。
现利用暑假时间自学《数据结构与算法分析》一书,希望能有所收获吧。
习题1.1收获:
1.冒泡排序原理自己还是没懂,需要再花一定时间去弄清楚;
2.数组元素所在位置不清,遍历数组时容易混乱;
(以下代码是本人根据书本自己摸索出来的,历时两天。由于基本功不扎实,脑子不灵活,有任何问题希望大家能帮忙指正)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXN 1000
/*
*编写一个程序解决选择问题
*选择问题:设有一组N个数而要确定其中第k个最大者
*令 k = N/2
@author:金傲Asher
*解决方案:
*先采用 .带标记冒泡排序. 把前k个元素读入数组并进行排序
*当新元素被读到时,若小于第k个元素则忽略,若大于则插入并排序
*结果将第k个元素返回
*/
/*冒泡排序*/
void BubbleSort(int a[],int n){
int i,temp;
bool flag=true;
while(n>1 && flag){
flag=false;
for (i=0;i<n-1;i++)
if (a[i]<a[i+1]){
flag=true;
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
n--;
}
}
int main()
{
int a[MAXN]={0};
int i,size,temp;
scanf("%d",&size);
for(i=0;i<size;i++){
scanf("%d",&a[i]);
}
BubbleSort(a,size/2);
for(i=size/2;i<size;i++){ //将数组k/2的元素与下面的元素进行比对,若中值元素小于余下元素,则将前k/2+1个进行重新排序
if(a[i]>a[size/2-1]){
temp=a[i];
a[i]=a[size/2];
a[size/2]=temp;
BubbleSort(a,size/2+1);
}
}
for(i=0;i<size;i++) //打印数组
printf("%d ",a[i]);
printf("\n");
printf("%d",a[size/2]); //打印中值元素
return 0;
}