概述
废话不多说直接上代码,注释都写了,基本没有难以理解的地方,前提是有基础的人来复习。
#include<stdio.h>
#include<stdlib.h>
void bubblesort(int a[],int len); //冒泡排序
void insertsort(int a[],int len); //插入排序
void selectsort(int a[],int len); //选择排序
int halfIntervalsearch(int a[],int len,int num); //折半查找
void printFunction(int a[],int len){
int i;
printf("排序后的结果:");
for(i=0;i<len;i++){
printf("%d ",a[i]);
}
printf("n");
}
int main(){
int a[] = {3,24,12,56,32,27,18,94,36,16};//原始数组
// int a[] = {10,9,8,7,6,5,4,3,2,1};
int len = 10; //数组长度
int n; //查找的数
// bubblesort(a,len); //冒泡排序
// insertsort(a,len); //插入排序
// selectsort(a,len); //选择排序
// printFunction(a,len); //打印排序以后的坐标
n=34; //排序完成以后查找36所在位置的下标
halfIntervalsearch(a,len,n); //折半查找法
n=12;
halfIntervalsearch(a,len,n);
return 0;
}
/*
冒泡排序
*/
void bubblesort(int a[],int len){
int i,j,temp;
int flag;//优化的标志 ,是否有交换
for(i=0;i<len;i++){
flag=1;
for( j = 1; j<len-i;j++){
if(a[j-1]>a[j]){//升序
temp=a[j-1];
a[j-1] = a[j];
a[j] = temp;
flag = 0;
}
}
if(flag)//如果一轮冒泡过程中都没有出现交换,那说明已经拍好序了就可以直接跳出循环。
break;
}
}
/*
插入排序
*/
void insertsort(int a[],int len){
int i;//待插入数据的下标
int j;//已排序数组末尾的下标
int temp;//存储准备插入的数
for(i=1;i<len;i++){
temp =a[i];
for(j=i-1;j>=0 && a[j]>temp;j--){
if(a[j]>temp){//向后移动数据
a[j+1]=a[j];
}
}
a[j+1]=temp;
}
}
/*
选择排序
*/
void selectsort(int a[],int len){
int min;//最小数的下标
int i,j;
int temp;//中间变量
for(i=0;i<len;i++){
min = i;
for(j=i+1;j<len;j++){
if(a[min]>a[j]){//找出未排序的数组中最小数的下标
min = j;
}
}
if(min != i){
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
}
/*
折半查找
*/
int halfIntervalsearch(int a[],int len,int num){
int high=len-1;
int low=0;
int mid;
selectsort(a,len);
while(low<=high){
mid = (high+low)/2;
if(a[mid] == num){
printf("%d的下标为%dn",num,mid);
return 1;
}
else if(a[mid]<num){
low = mid+1;
}else{
high = mid-1;
}
}
printf("%d不在数组中n",num);
return 0;
}
最后
以上就是爱笑蜡烛为你收集整理的C语言——冒泡排序、选择排序、插入排序、折半查找的全部内容,希望文章能够帮你解决C语言——冒泡排序、选择排序、插入排序、折半查找所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复