1.冒泡排序
#include <stdio.h>
#define N 10
int main ()
{
int a[N];
for(int i = 0; i < N; i++)
{
scanf("%d",&a[i]);
}
//冒泡排序,就是两两比较,不对就换,咱这里是升序哈
int temp;
for(int i = 0; i < N - 1; i++)//边界是换最后两个,所以只要到N-1就够了,我们要走N-1次
{
for(int j = 0; j < N - i -1; j++)
//每次要判断多少回,比如说最后一次(I=N-2)判断一次(j<1 => j=0 ),这样就可以得到临界了
{
if(a[j] > a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] =temp;
}
}
}
for(int i = 0; i < N; i++)
{
printf("%d\n",a[i]);
}
return 0;
}
2.交换排序
#include<stdio.h>
#define N 10
int main()
{
int a[N];
for(int i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
//交换排序,就是每一个数轮着下去和剩余的数比较,老样子我们排升序
for(int i = 0; i < N - 1; i++)
//那这层就好理解了,要比那肯定要有数可比,那么临界就是N-1(因为用的是<而不是<=)
{
for(int j = i + 1; j < N; j++)//这里的临界就是比到最后一个数嘛
{
if(a[i] > a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for(int i = 0; i < N; i++)
{
printf("%d\n",a[i]);
}
return 0;
}
3.选择排序
#include<stdio.h>
#define N 10
int main()
{
int a[N];
for(int i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
//选择排序,关键就是选到一个适合的位置,老样子,升序
for(int i = 0; i < N; i++)
//和交换一样,这里也是要留一个判断的位置
{
int k = i;
for(int j = i + 1; j < N; j++)
//这里也是和交换一样的
{
if(a[k] > a[j])
{
k = j;
}
}
if(k != i)
{
int temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
for(int i = 0; i < N - 1; i++)
{
printf("%d\n",a[i]);
}
return 0;
}
暂时性的小结一下吧,权当复习用
冒泡排序,一直是从头到尾(这个定下了外循环和内循环的初值),两个两个冒(这就决定了内循环),其实是很形象的;
交换排序,1vs多,1是轮着下去,多是从1的后一个开始的剩下的,好到得有一个和1比对吧;
选择排序,选择就是选位置,其实它和交换排序的相似度奇高,只是要多一个变量用来订位子。
我觉得总的来说,最好理解的还是交换排序。
//又来复习了,仍然用三种方法,但是模块化了,特别一点是用了函数指针,增强通用性。^-^
#include<stdio.h>
#define N 100
void swap(int *x,int *y);
int as(int x,int y);
int des(int x,int y);
void bubble(int a[],int n,int (*f)(int,int));
void exchange(int a[],int n,int (*f)(int,int));
void select(int a[],int n,int (*f)(int,int));
int main()
{
int n;
scanf("%d",&n);
int a[n],i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("冒泡排序结果:\n");
bubble(a,n,as);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("交换排序结果:\n");
exchange(a,n,as);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("选择排序结果:\n");
select(a,n,des);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
int as(int x,int y)
{
return x<y;
}
int des(int x,int y)
{
return x>y;
}
void bubble(int a[],int n,int (*f)(int,int))
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(!(*f)(a[j],a[j+1]))
{
swap(&a[j],&a[j+1]);
}
}
}
}
void exchange(int a[],int n,int (*f)(int,int))
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(!(*f)(a[i],a[j]))
swap(&a[i],&a[j]);
}
}
}
void select(int a[],int n,int (*f)(int ,int))
{
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(!(*f)(a[k],a[j]))
k=j;
}
if(k!=i)
swap(&a[k],&a[i]);
}
}