选择查找是先遍历一遍找出最小值放在第一位,然后依次减小数组的大小,最后找到最大值的算法
#include<stdio.h>
#include<conio.h>
#define N 10
int E[N]={213,111,222,77,400,300,987,1024,632,555};
void ssort(int e[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
for(k=i,j=i;j<n;j++)
if(e[k]>e[j])
k=j;
if(k!=j)
{
t=e[i];
e[i]=e[k];
e[k]=t;
}
}
}
void main()
{
int i;
printf("选择排序,初始数据序列为:\n");
for(i=0;i<N;i++)
printf("%d ",E[i]);
ssort(E,N);
printf("\n排序后数据序列:\n");
for(i=0;i<N;i++)
printf("%d ",E[i]);
getch();
}
直接插入排序是在已知的排好序的序列中依次加入一个数,把他放在正确的位置上的方法xuan
#include<stdio.h>
#include<conio.h>
#define N 10
int E[N]={213,111,222,77,400,300,987,1024,632,555};
void sisort(int e[],int n)
{
int i,j,t;
for(i=1;i<n;i++)
{
for(t=e[i],j=i-1;j>=0&&e[j]>t;j--)
e[j+1]=e[j];
e[j+1]=t;
}
}
void main()
{
int i;
printf("选择排序,初始数据序列为:\n");
for(i=0;i<N;i++)
printf("%d ",E[i]);
sisort(E,N);
printf("\n排序后数据序列:\n");
for(i=0;i<N;i++)
printf("%d ",E[i]);
getch();
}
冒泡排序:把第一个元素和第二个元素比较,选出较大的数和第三个元素比较,依次类推至最后一个元素,把最后的那个元素踢出循环,然后重复这个过程。
#include<stdio.h>
#include<conio.h>
#define N 10
int E[N]={213,111,222,77,400,300,987,1024,632,555};
void sbsort(int e[],int n)
{
int j,p,h,t;
for(h=--n;h>0;h=p)
{
for(p=j=0;j<h;j++)
if(e[j]>e[j+1])
{
p=e[j];
e[j]=e[j+1];
e[j+1]=p;
p=j+1;
}
}
}
void main()
{
int i;
printf("冒泡排序,初始数据序列为:\n");
for(i=0;i<N;i++)
printf("%d ",E[i]);
sbsort(E,N);
printf("\n排序后数据序列:\n");
for(i=0;i<N;i++)
printf("%d ",E[i]);
getch();
}
本文仅仅讨论了较基础的三种排序算法,有问题欢迎指出,谢谢大家。