选择排序 插入排序 气泡排序
许久在考虑数据结构算法用什么语言最好实现,哈哈,忽然发现自己是在想一个可傻的问题。数据结构本身就是一种解决问题方法的科学,是一种思维,用什么工具都可以实现,对各种语言的内在思想不强调。····
复习了下简单的排序方法,算法思想。
选择排序的对象分作两部分,一个是已经排好的,一个是为排好的,每一次排序从后面的为排好的选择一个最小值,放在前面已经排好的最后面。
插入排序可以把数据分为两部分, 每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。
气泡排序就是每次最大的元素如同气泡一样移动至右边,这样最大的元素会不断的都会移动向右边。
下面为C程序实现:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 10
#define SWAP(x,y) {int t; t= x; x= y; y = t;}
void selsort(int[]);
void insort(int[]);
void bubsort(int[]);
int main(void)
{
int number[MAX] = {0};
int i;
printf("**********************************************\n");
srand(time(NULL)); //产生不同的随机数种子
printf("排序前:");
for(i= 1;i<=MAX;i++)
{
number[i] = rand()/1000;
printf("%3d\t",number[i]);
}
printf("\n请选择排序方式:\n");
printf("(1)选择排序 (2)插入排序 (3)冒泡排序\n (0)退出\n");
scanf("%d",&i);
switch(i)
{
case 1: selsort(number); break;
case 2: insort(number); break;
case 3: bubsort(number); break;
case 0: exit(0); break;
default: printf("选项错误(0-3)!!!");
}
return 0;
}
void selsort( int number[]) //选择排序
{
int i,j,k,m;
for(i = 1; i<MAX; i++)
{
m=i; //假定第一个为最小
for(j=i+1;j<MAX+1;j++)
if(number[j]<number[m])
m = j; //第i+1次从剩下的找出最小的
if(i != m)
SWAP(number[i],number[m])
printf("第%d次排序:",i);
for(k = 0;k<MAX;k++)
printf("%d ",number[k+1]);
printf("\n");
}
main();
}
void insort(int number[]) //插入排序
{
int i, j, k;
for(j = 2;j<=MAX;j++)
{
number[0] = number[j];
i = j-1;
while(number[0]<number[i])
{
number[i+1] = number[i];
i--;
if(i == -1)
break;
}
number[i+1] = number[0];
printf("第%d次排序:",j);
for(k = 1;k<=MAX;k++)
printf("%d ",number[k]);
printf("\n");
}
main();
}
void bubsort(int number[]) //气泡排序
{
int i, j, k, flag = 1;
for(i = 0;i<MAX&&flag ==1;i++)
{
flag = 0;
for(j=1;j<MAX-i;j++) //次数>0 <n-1
{
if(number[j+1]<number[j])
{
SWAP(number[j+1],number[j]);
flag = 1;
}
}
printf("第%d次排序:",i+1);
for(k=0;k<MAX;k++)
printf("%d ",number[k]);
printf("\n");
}
main();
}
选择排序实现:
插入排序实现:
冒泡排序实现: