c语言排序算法

153 阅读1分钟

1、冒泡排序

基本思想: (1)从第一个元素开始,从左往右依次比较两个相邻的元素。如果左边的元素大于右边的元素,则这两个元素进行交换。交换完成后继续依次往下比较,直到比较到最后的两个元素时,第一次排序结束,使得该数组中的最大值位于最右侧。 (2)接着下一趟比较。使得第二大的元素换到,从右数第二个的位置。 (3)一趟趟的排序,就可以使得数组从小到大排序。 在这里插入图片描述

代码

#include<stdio.h>
#define N 6 
int main()
{
	int i,j,t;
	int a[N];
	printf("please input 6 number\n");
	//输入要排序的数字序列
	for(i=0;i<N;i++)
	{ 
		scanf("%d",&a[i]);
	}
	for(i=0;i<N-1;i++)    //一共循环n-1趟
	{
		for(j=0;j<N-i-1;j++)   //一趟进行多少次比较
		{
			if(a[j]>a[j+1])      //判断是否左边是否大于右边,大于则交换
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	}
	//打印输出
	for(i=0;i<N;i++)
	{
		printf("%d\n",a[i]);
	}
	return 0;
}

运行效果 在这里插入图片描述

2、选择排序

基本思想: (1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数交换----第一次选择排序,结果最小的数被安置在第一个元素的位置上。 (2)再通过第二次比较,从剩余的n-1个数中找到次小的数,将它与第二个数交换-----第二次选择排序,次小的数被安置在第二个元素的位置上。 (3)重复上述过程,共经过n-1次排序后,数组中的元素从小到大顺序存储。

在这里插入图片描述

代码

#include<stdio.h>
#define N 6 
int main()
{
	int a[N],i,j,m,t;
	printf("please input %d:\n",N);
	//输入要排序的数字序列
	for(i=0;i<N;i++)
	{
		
		scanf("%d",&a[i]);
	}

	for(i=0;i<N-1;i++)  //一共循环n-1趟
	{
		m=i;          //判断标志
		for(j=i+1;j<N;j++)  //一趟进行多少次比较
		{
			if(a[j]<a[m])
			{
				m=j;      //如果遍历到的数小,记录它的下标
			}
		}
		if(m!=i)
		{
			t=a[m];
			a[m]=a[i];
			a[i]=t;
		}
	}
	printf("the array after sort:\n");
	//打印输出
	for(i=0;i<N;i++)
	{
		printf("%d\n",a[i]);
		
	}
	return 0;
	 
}

运行效果

在这里插入图片描述