一、
函数:void Bub_Sort(int* head,int low,int high,int Bool)
参数解释
head:数组指针
[low, high]:需排序的数组范围
Bool:等于1表示从小到大排序,不等于1从大到小排序
说明
扫描数组中low到high-(i-low)范围
通过交换,使得head[j]始终为数组low到j范围的最大值
此方法每遇到更大的值需要交换一次
最多的交换次数为第一层循环次数*第二层循环次数(第二层循环每一次循环都需要交换)
#include <stdio.h>
#include <time.h>
void Bub_Sort(int* head,int low,int high,int Bool){//多次交换
int temp;//交换
int temp1;//优化
for(int i=low;i<high;i++){
temp1=high-(i-low);
for(int j=low+1;j<=temp1;j++){
//使得head[j]始终为最值
//Bool等于1为递增序列,Bool不等于1为递减序列
if((head[j]<head[j-1])==Bool){
temp=head[j];
head[j]=head[j-1];
head[j-1]=temp;
}
}
}
}
int main(int argc, char **argv) {
printf("Hello, World!\n");
int s[5];
s[0]=2;
s[1]=5;
s[2]=1;
s[3]=4;
s[4]=3;
int i=0;
while(i<5)printf("%d ",s[i++]);
printf("\n---------\n");
Bub_Sort(s,0,4,1);
int j=0;
while(j<5)printf("%d ",s[j++]);
return 0;
}
二、
参数解释
head:数组指针
[low, high]:需排序的数组范围
说明
该函数也可通过添加Bool参数实现顺逆排序的转换
扫描数组中low到high-(i-low)范围
使得Value指向数组该范围中的最大值
最后Value处与high-(i-low)处的值相交换
此方法第二层每循环一次需要交换一次
最多交换的次数为第一层循环的循环次数
void Bub_Sort1(int* head,int low,int high){//类冒泡,单次交换
int Value;//记录当前最值位置
int temp;//交换
int temp1;//优化
for(int i=low;i<high;i++){
Value=low;//设定当前最值位置
temp1=high-(i-low);
for(int j=low+1;j<=temp1;j++){
if(head[j]>head[Value]) Value=j;
}
//将Value位置的值放到末尾:head[high-(i-low)]
temp=head[high-(i-low)];
head[high-(i-low)]=head[Value];
head[Value]=temp;
}
}