冒泡排序
//冒泡排序
/*
每两个数之间做比较:较大的数放到右边,循环下去;就能够把最大的数字换到数组最后面
然后数组长度--
再两个数之间作比较。。。。。
*/
void bubble(int a[],int n)
{
for(int i=0;i<n-1;i++)//注意a[n-1]为数组的最后一项,没有数字和他做比较,故i<n-1
{
if(a[i]>a[i+1])
a[i]=a[i]+a[i+1]-(a[i+1]=a[i]);
}
}
void bubbleSort(int a[],int n)
{
while(n>0)
bubble(a,n--);
}
int main(){
int a[7]={7,2,1,3,6,5,4};
int n=7;
bubbleSort(a,n);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
}
选择排序
//选择
/*
选择排序就像是军训的时候按高矮个站队:
先在数组中挑出一个最高个和队伍最后面的同学换位置
然后排除最高个
再在剩余的同学里面挑最高个和倒数第二个交换
然后再排除最高个和次高个
再在剩余的同学里面挑最高个和倒数第三个交换
。。。。。。
*/
int selectPos(int a[],int n)
{
int pos=0;
int max=a[0];
for(int i=0;i<n;i++)
{
if(max<a[i])
{
max=a[i];
pos=i;
}
}
return pos;
}
void selectionSort(int a[],int n)
{
while(n>0)
{
int pos=selectPos(a,n);
a[n-1]=a[pos]+a[n-1]-(a[pos]=a[n-1]);
n--;
}
}
int main(){
int a[7]={7,2,1,3,6,5,4};
int n=7;
selectionSort(a,n);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
}
插入排序
//插入排序
/*
插入排序就像是你在斗地主:
当你抽到一张牌的时候,自然就需要往你现在的牌堆里面插入:方便你下一步打顺子
比如你抽到5的时候,自然就会往小于6的数字的位置放
这是一个总体的思想,现在开始拆分插入的过程:
首先明确:当数组中有1个数的时候是不需要排序的,所以for循环是从1开始的
(也就是对两个以上的数排序)
设当前接收到的数组的最后一个数字位key,拿数组中每一个数字和key作比较,当发现有小于
key的关键字时,就往数组里面插入
*/
void insert(int a[],int n)
{
int key=a[n];
while(a[n-1]>key)
{
a[n]=a[n-1];
n--;
if(n==0)
a[n]=key;
}
a[n]=key;
}
void insertSort(int a[],int n)
{
for(int i=1;i<n;i++)//当数组中只有一个数时,默认有顺序的
insert(a,i);
}
int main(){
int a[7]={7,2,1,3,6,5,4};
int n=7;
insertSort(a,n);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
}