冒泡升序:冒泡排序是从下标0 开始依次往后比较 ,最大的排到最后,接着第二轮也是从0 开始 一直到倒数第二,依次类推,外长成循环,执行n-1 次,内层循环每执行一次就减少一次所以是n-i ,但是n-i 这个值超过范围了,需要在减一
#include <stdio.h>
#include <stdlib.h>
#include "Swap.h"
//冒泡排序
void Bubble_Sort(int n,int nums[])
{
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if (nums[j]>nums[j+1])
{
Swap(&nums[j],&nums[j+1]);
}
}
}
}
选择升序:就是按照下标位置,最后一个下标是最大值,倒数第二个就是次大值,依次类推。所以外层循环也是n-1次,内层循环随着位置被确定 ,需要的次数也减少所以是 n-1-i 次
#include <stdio.h>
#include <stdlib.h>
#include "Swap.h"
//选择排序
void Selection_Sort(int n,int nums[])
{
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if (nums[j]>nums[n-1-i])
{
Swap(&nums[j],&nums[n-1-i]);
}
}
}
}
交换排序:从下标第一个开始和后面的做比较,大的话就交换,第一轮就会数值最小的就在第一个,依次类推,第二轮就是第二小,没进行一轮内层循环就会少一次。
#include <stdio.h>
#include <stdlib.h>
#include "Swap.h"
//交换排序
void Jiaohuan_Sort(int n,int nums[])
{
int j;
for(int i=0;i<n-1;i++)
{
for( j=i+1;j<n;j++)
{
if (nums[i]>nums[j])
{
Swap(&nums[i],&nums[j]);
}
}
}
}
子程序 交换:
void Swap(int* a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
头文件:
#ifndef SWAP_H_INCLUDED
#define SWAP_H_INCLUDED
void Swap(int *a,int* b);
void Bubble_Sort(int n,int nums[]);
void Selection_Sort(int n,int nums[]);
void Jiaohuan_Sort(int n,int nums[]);
#endif // SWAP_H_INCLUDED
主函数:
#include <stdio.h>
#include <stdlib.h>
#include "Swap.h"
int main()
{
int a[10]={58,34,11,87,61,78,45,0,12,19};
int b[10]={58,34,11,87,61,78,45,0,12,19};
int c[10]={58,34,11,87,61,78,45,0,12,19};
printf("选择排序法\n");
Selection_Sort(10,a);
for(int i=0;i<10;i++)
printf("%d\t",a[i]);
printf("\n");
printf("冒泡排序法\n");
Bubble_Sort(10,b);
for(int i=0;i<10;i++)
printf("%d\t",b[i]);
printf("\n");
printf("交换排序法\n");
Jiaohuan_Sort(10,c);
for(int i=0;i<10;i++)
printf("%d\t",c[i]);
return 0;
}