【C语言】两种方式实现冒泡排序算法
题目要求
算法
冒泡排序,用一句话来总结:
一组数中,相邻的两个数进行比较、交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序
要想对N个数字进行排序,循环N次即可.
如果真的不理解冒泡排序算法,请点击:冒泡排序_360百科
核心代码
//方式一:从头向尾遍历,将最大数(相对)沉入尾部(相对)
void BubbleSort1(int *arr,int sz){
int i = 0;
int j = 0;
assert(arr);
for(i=0;i<sz-1;i++){
for(j=0;j<sz-i-1;j++){
if(arr[j]>arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
//方式二:从尾向头遍历,将最大数(相对)冒泡到头部(相对)
void BubbleSort2(int *arr,int sz){
int i = 0;
int j = 0;
assert(arr);
for(i=0;i<sz-1;i++){
for(j=sz;j>i;j--){
if(arr[j]>arr[j-1]){
int tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}
}
完整代码
/*
*本代码版权归高小调博客所有
*作者:高小调
*日期:2016-9-9
*代码功能:通过C语言实现冒泡排序算法
*集成开发环境:Microsoft Visual Studio 2010
*/
#include<stdio.h>
#include<assert.h>
#include<stdlib.h.h>
//从头向尾遍历
//相邻两数进行比较
//将最大数(相对)沉入尾部(相对)
void BubbleSort1(int *arr,int sz){
int i = 0;
int j = 0;
assert(arr);
for(i=0;i<sz-1;i++){
for(j=0;j<sz-i-1;j++){
if(arr[j]>arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
//从尾向头遍历
//相邻两数进行比较
//将最小数(相对)冒泡到头部(相对)
void BubbleSort2(int *arr,int sz){
int i = 0;
int j = 0;
assert(arr);
for(i=0;i<sz-1;i++){
for(j=sz;j>i;j--){
if(arr[j]>arr[j-1]){
int tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}
}
//测试函数
//为了方便起见,将参数设定为一个函数指针
void TestBubbleSort(void (*BubbleSort)(int *arr,int sz)){
int arr[]={1,3,5,7,9,2,4,6,8,0};
int i = 0;
int sz = sizeof(arr)/sizeof(arr[0]);
BubbleSort(arr,sz);
for(i=0; i<sz; i++){
printf("%d ",arr[i]);
}
printf("\n");
}
int main(){
TestBubbleSort(BubbleSort1);
TestBubbleSort(BubbleSort2);
system("pause");
return 0;
}
输出结果
以上只是冒泡排序算法的基本实现,还有很大的优化空间.至于优化的具体细节,详见下文.
(本文来源于互联网,若有侵权,请联系博主)
【C语言】两种方式实现冒泡排序算法的更多相关文章
- R语言两种方式求指定日期所在月的天数
R语言两种方式求指定日期所在月的天数 days_monthday<-function(date){ m<-format(date,format="%m& ...
- C语言两种方式实现矩阵的转置
#include"stdio.h" typedef struct{ int i,j; int v; }Triple; typedef struct{ Triple date[]; ...
- C#两种基本的冒泡排序算法
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
- 通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制
通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制 前言说明 本篇为网易云课堂Linux内核分析课程的第四周作业,我将通过调用C语言的库函数与在C代码中 ...
- C语言中存储多个字符串的两种方式
C语言中存储多个字符串的两种方式 方式一 二维字符串数组 声明: char name[][] = { "Justinian", "Momo", " ...
- JavaScript 算法应用: 遍历DOM树的两种方式
1 常见的DOM树结构: 2 DOM数遍历有两种方式: 3 广度优先代码: 4 深度优先遍历代码
- [算法基础]斐波那契(recursion+loop)两种方式执行时间对比
一.斐波那契数列求第n项两种方式 1.递归(自上而下)def recur_fibonacci(n): if n <= 0: return 0 if n == 1: return 1 return ...
- 求GCD(最大公约数)的两种方式
求GCD(最大公约数)的两种方式 这篇随笔讲解C++语言程序设计与应用中求GCD(最大公约数,下文使用GCD代替)的两种常用方式:更相减损法和辗转相除法,前提要求是具有小学数学的基本素养,知道GCD是 ...
- WebService的两种方式Soap和Rest比较
我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript ...
随机推荐
- java 继承的学习(转)
转自:http://www.cnblogs.com/happyframework/p/3332243.html,非常感谢啊 public class test { /** * @param args ...
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...
- Android Studio中.9.png文件出错问题
昨天使用别人的.9.png图片放在自己的android studio工程下使用,出现如下错误: :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DA ...
- 树莓派上搭建arduino开发环境
-------------还是博客园上面的格式看这舒服,不去新浪了------------- 为什么要在树莓派上开发arduino呢?总要把树莓派用起来嘛,不然老吃灰. 树莓派使用SSH时没有图形界面 ...
- click延时300ms的故事
这要追溯至 2007 年初.苹果公司在发布首款 iPhone 前夕,遇到一个问题:当时的网站都是为大屏幕设备所设计的.于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点的问题 ...
- 【排序算法】快速排序算法 Java实现
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). 基本思想 先从数组中找出一个数作为基 ...
- C#中获取不同的日期时间格式
通过调用类中的各种方法我们可以获取不同的时间: 如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12:11:10)等. //获取日期+时间 DateTim ...
- 1. Two Sum★
题目内容:Given an array of integers, return indices of the two numbers such that they add up to a specif ...
- 项目架构开发:数据访问层之UnitOfWork
接上文 项目架构开发:数据访问层之IQuery 本章我们继续IUnitOfWork的开发,从之前的IRepository接口中就可以看出,我们并没有处理单元事务, 数据CUD每次都是立即执行的,这样有 ...
- 问题 : lang.NoClassDefFoundError: org/springframework/core/annotation/AnnotatedElementUtils,的解决方法
今天在做junit 测试的时候 出现了一个问题,花了一段时间 才解决. java.lang.NoClassDefFoundError: org/springframework/core/annota ...