冒泡法排序
本题要求将给定的n个整数从小到大排序后输出。输出时相邻数字中间用一个空格分开,行末不得有多余空格。
#include <stdio.h>
# define MAXN 10
int main(){
int i,j,n,temp;
int a[MAXN];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
//从后往前两两比较相邻元素的值
for( i=1;i<n;i++){ //外层循环最多进行n-1轮
for(j=n-1;j>i-1;j--){ //内层循环最多进行n-i-1次
if (a[j-1]>a[j]){ //前一项比后一项大就交换
temp=a[j-1];a[j-1]=a[j];a[j]=temp;
}
}
}
for(i=0;i<n;i++) {
printf("%d ",a[i]);
}
return 0;
}
选择法排序
本题要求将给定的n个整数从小到大排序后输出。输出时相邻数字中间用一个空格分开,行末不得有多余空格。
#include <stdio.h>
# define MAXN 10
int main(){
int i,index,k,n,temp;
int a[MAXN];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(k=0;k<n-1;k++){
index=k;
for(i=k+1;i<n;i++){ //前面的每一个数依次与后面的每一个数比较
if(a[i-1]<a[i]){
index=i; //找出最小值下标
}
}
temp=a[index];a[index]=a[k];a[k]=temp;
}
for(i=0;i<n;i++) {
if( i==0 ){
printf("%d",a[i]);
}else{
printf(" %d",a[i]);
}
}
printf("\n");
return 0;
}
插入法排序
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
输入格式:
输入在第一行先给出非负整数N(N <10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出格式:
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
输入样例:
5
1 2 4 5 7
3
输出样例:
1 2 3 4 5 7
#include<stdio.h>
#define maxN 10
int main()
{
int n,x,i,j,a[maxN];
scanf("%d",&n);
if(n==0){
scanf("%d",&x);
printf("%d ",x);
return 0;
}
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&x);
for(i=0;i<n;i++){
if(x<a[i]){ //插入的数x依次与数组中每一个数比较,小于则该数及其后所有数往后移一位
for(j=n-1;j>=i;j--){
a[j+1]=a[j];
}
a[i]=x;
break;
}else if(i==n-1){
a[n]=x;
}
}
n++; //总数加1
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}
二分查找法
按照从小到大的顺序,输入n个整数并存入数组a中,然后在数组a中查找给定的x。如果数组a中的元素与x的值相同,输出相应的下标(下标从0开始);如果没有找到,输出“Not Found”。如果输入的n个整数没有按照从小到大的顺序排列,或者出现了相同的数,则输出“Invalid Value”。
1 检查数列是否完全递增
2 不断将x与mid比对,调整缩小left与right的范围
3 用变量found确定是否找到
#include <stdio.h>
# define MAXN 10
int main(){
int found,i,left,mid,n,right,sorted,x;
int a[MAXN];
scanf("%d %d",&n,&x);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
sorted=1;
for(i=1;i<n;i++){
if(a[i-1]>=a[i]){
sorted=0;
break;
}
}
if(sorted == 0){
printf("Invalid Value\n");
}else{
found=0;
left=0,right=n-1;
while(left <= right){
mid=(left+right)/2;
if (x == a[mid]){
found=1;
break;
}else if (x<a[mid]){
right=mid-1;
}
else{
left=mid+1;
}
}
if(found != 0){
printf("%d\n",mid);
}
else{
printf( "Not Found\n");
}
}
return 0;
}