工作原理:一次比较两个元素,将顺序错误的纠正
C语言实现:
1.模块化
#include <stdio.h>
//定义常量数组长度
#define MAX_SIZE 6
//&符号在函数形式参数上代表实际参数的值会随函数操作改变而改变
void sort(int[],int &);
void print_list(int[]);
void swap(int &,int &);
int main(int argc, const char * argv[])
{
//次数
int n = 0;
//定义数组
int arr[MAX_SIZE]={1,10,1,3,6,7};
sort(arr,n);
print_list(arr);
return 0;
}
/**
* Sort 比较排序,从小到大
* @param array list[] 需要排序的数组
* @param int n 执行排序的次数
*/
void sort(int list[],int &n)
{
//如果次数大于数组长度,则结束递归
if (n>=MAX_SIZE-1) {
return;
}
int index;
for (index = 0; index<MAX_SIZE-n; ++index) {
if (list[index]>list[index+1]) {
//交换数值
swap(list[index], list[index+1]);
}
}
++n;
//递归操作
sort(list, n);
}
//以下是公共方法
/**
* Print_list 遍历数组
* @param array list[] 需要遍历的数组
*/
void print_list(int list[])
{
for (int i=0; i<MAX_SIZE; ++i) {
printf("a[%d]:%d ",i,list[i]);
}
}
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
2.简单版
#include <stdio.h>
//定义常量数组长度
#define MAX_SIZE 6
#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
//&符号在函数形式参数上代表实际参数的值会随函数操作改变而改变
int main(int argc, const char * argv[])
{
//次数
int n = 0,temp;
//定义数组
int arr[MAX_SIZE]={1,10,1,3,6,7};
for(n;n<MAX_SIZE-1;++n){
for (int index = 0; index<MAX_SIZE-n; ++index) {
if (arr[index]>arr[index+1]) {
//交换数值
SWAP(arr[index], arr[index+1],temp);
}
}
}
for (int i=0; i<MAX_SIZE; ++i) {
printf("a[%d]:%d ",i,arr[i]);
}
return 0;
}