不成熟的c语言练习2-创新互联
机缘
头文件
代码
憧憬
网页标题:不成熟的c语言练习2-创新互联
转载来于:http://pwwzsj.com/article/egesh.html
五味陈杂,这个月没咋写代码做项目,考研也应该是废了,准备把天赋带到考公和工作上,最近打算准备一下毕设和整理以前的课设。晚上玩完游戏练习了几个常用的基础排序算法,不知道以后的工作是否还能用上这些。
创新互联,为您提供成都网站建设、成都网站制作、网站营销推广、网站开发设计,对服务塔吊租赁等多个行业拥有丰富的网站建设及推广经验。创新互联网站建设公司成立于2013年,提供专业网站制作报价服务,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏心悦目的作品。 与客户共同发展进步,是我们永远的责任!头文件
extern void InsertSort(int a[], int n);//插入排序
extern void ShellSort(int a[],int n);//希尔排序
extern void QuickSort(int a[],int low,int high);//快速排序
extern void BubbleSort(int a[],int n);//冒泡排序
extern void BubbleSort_c(int a[],int n);//双向交替冒泡排序
代码
void InsertSort(int a[], int n){int i,j=0;
int temp=0;
for(i=1;iif(a[i]//判断是否需要排序
temp = a[i];//临时储存当前要排序的数
for (j = i - 1; (a[j]>temp)&&(j>=0); j--) {//如果不限定j>=0会在第一位需要挪动时产生错误
a[j + 1] = a[j];//从后往前向后挪1位,直到找到比要排序的数要小的数
}
a[j + 1] = temp;//把要插入的数放在比这个数小的数后面
}
}
}
void ShellSort(int a[],int n){int j=0;
for(int dk=n/2;dk>=1;dk=dk/2)//控制步长变化
for(int i=dk;i//看这个元素是否需要和子表中上一个元素交换顺序,此元素比上一个元素小则需要把这个元素
int temp=a[i];//temp暂存需要重排序的元素
for(j=i-dk;j>=0&&temp
int Partition(int a[],int low,int high){//控制low和high两个下标,交替搜索比轴大的或比轴小的,比轴小的移动到low处,比轴大的移动到high处
int pivot = a[low];//把当前表的第一个元素的值作为轴,这个轴会最终在low和high相等处出现
while(low//只有一个元素的时候就不执行了,即low==high时
while(low=pivot) high--;//用high从后往前搜索直到找到比轴小的,相等不动
a[low]=a[high];//将那个比轴小的数放到low的那个位置去,相当于后移(局部不讲顺序)
while(lowif(low//超过一个元素才有排序的必要,即最小子表只剩一个元素时局部排序完成,总体排序也完成
int pivot = Partition(a,low,high);//对表进行划分
QuickSort(a,low,pivot-1);//分别对两个子表进行排序,这是分治的思想
QuickSort(a,pivot+1,high);
}
}
void swap(int *a,int *b){//注意此处如果不是传入地址将无法进行实质上的交换
int temp=*a;
*a=*b;
*b=temp;
}
void BubbleSort(int a[],int n){bool flag = false;//记录某一趟有没有发生交换
for(int i=0;i<=n-1;i++){//冒泡排序从0干到n-1,一共n趟,每一趟把大的元素放到最后
flag = false;
for(int j=0;j<=n-2-i;j++){//每一趟从前往后进行比较,不断交换把大的元素往后推,大的元素会推到最后确定顺序
if(a[j]>a[j+1]){//最后一位是n-1-i
swap(&a[j],&a[j+1]);
flag=true;
}
}
if(flag == false) return;//如果某一趟没有发生交换则提前有序
}
}
void BubbleSort_c(int a[],int n){//双向冒泡排序
bool flag = false;//记录某一趟有没有发生交换
int c=0;
for(int i=0;i<=n-1;i++) {//冒泡排序从0干到n-1,一共n趟,每一趟把大的元素放到最后
flag = false;
for (int j = 0; j<= n - 2 - i; j ++) {//奇数趟从前往后进行比较,不断交换把大的元素往后推,大的元素会推到最后确定顺序
if (a[j] >a[j + 1]) {//最后一位是n-1-i
swap(&a[j], &a[j + 1]);
flag = true;
}
}
for (int j = n - 1 - i; j >= 1; j --) {//偶数趟每一趟从后往前进行比较,不断交换把小的元素往后推,最小的元素会推到最前边确定顺序
if (a[j]< a[j - 1]) {//只要元素比前一个元素小就交换两元素位置
swap(&a[j], &a[j - 1]);
flag = true;
}
}
if (flag == false) return;//如果某两趟没有发生交换则提前有序
}
}//双向冒泡排序
憧憬
继续练习吧,又站在人生的转折点了,以后想多研究计算机视觉和嵌入式方向,可能以后工作并不对口,但是希望以后最少能以爱好继续学下去。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网页标题:不成熟的c语言练习2-创新互联
转载来于:http://pwwzsj.com/article/egesh.html