1. 理解排序做的工作:
排序的过程是一个逐步扩大记录的有序序列长度的过程,
在排序的过程中可以将排序区分为两个区域:
有序序列区 和 无需序列区
有序序列区: 已经排好序的序列
无序序列区: 尚未排好序的序列
我们所要做的工作就是: 把有序序列区一点一点增大直到长度变为最大为止,无需序列区一点点减少直到减为0位置
2.交换排序的本质是: 交换无序列区,产生一个有序的的数,有序列区长度加一,无序列区长度减一
3.冒泡排序
冒泡核心思想是: 相邻元素进行比较交换
4.直接上代码:
#include<stdio.h>
void swap(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}
int main(int argc, char const *argv[])
{
int a[]={2,1,3,5,4,7,9,8,6};
for(int i=0;i<9-1;i++){//a[i]表示前一个元素(a[i]之前的元素是有序序列区,每一趟交换后,有序区长度即i加1)
for(int j=i+1;j<9;j++){//a[j]表示后一个元素(i每次都向前移动一个)
if(a[j]<a[i]){//让后一个元素和前一个元素相比较,如果比它小就交换
swap(&a[i],&a[j]);
}
}
}
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){
printf("%d,",a[i]);
}
getchar();
}
5.运行效果:
6.封装
#include<stdio.h>
void swap(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}
void buttSort(int *a,int length){
for(int i=0;i<length-1;i++){//a[i]表示前一个元素(a[i]之前的元素是有序序列区,每一趟交换后,有序区长度即i加1)
for(int j=i+1;j<length;j++){//a[j]表示后一个元素(i每次都向前移动一个)
if(a[j]<a[i]){//让后一个元素和前一个元素相比较,如果比它小就交换
swap(&a[i],&a[j]);
}
}
}
}
int main(int argc, char const *argv[])
{
int a[]={2,1,3,5,4,7,9,8,6};
buttSort(a,sizeof(a)/sizeof(a[0]));
//遍历
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){
printf("%d,",a[i]);
}
// printf("hellowrold");
getchar();
}