目录:

  • 选择法排序
  • 冒泡法排序
  • 交换法排序
  • 插入法排序
  • 折半法排序
  • 排升序
  • 总结


选择法排序

#include<stdio.h>
int main()
{
	int j, i;//定义两个整型控制内外两层循环
	int a[10];//声明一个整型数组
	int temp;//设置元素最小值
	int pos;//记录当前元素的位置
	//为数组元素赋值
	printf("请输入数组的元素:\n");
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);//输入元素
	}
	for (i = 0; i < 9; i++)//设置外层循环的下标为0-8
	{
		temp = a[i];//设置当前元素为最小值
		pos = i;//记录元素的位置
		for (j = i + 1; j < 10; j++)//内层循环i+1~9
		{
			if (a[j] < temp)//如当前元素比最小值大
			{
				temp = a[j];//重新设置最小值
				pos = j;//记录元素的位置
			}
		}
		//交换两个元素
		a[pos] = a[i];
		a[i] = temp;
	}
	//循环输出数组中的元素并在第五个元素以后进行换行
	for (i = 0; i < 10; i++)
	{
		printf("%d\t", a[i]);
		if (i == 4)
			printf("\n");
	}
	return 0;
}

冒泡法排序

#include<stdio.h>
int main()
{
	int j, i;
	int a[10];//99 11 15 16 51 56 85 65 25 52 
	int temp;
	printf("请输入数组的元素:\n");
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);
	}
	for (i = 1; i < 10; i++)//外层循环的下标为1~9
	{
		for (j = 9; j >= i; j--)//内层循环的下标为i~9
		{
			if (a[j] < a[j - 1])//如果前一个数比后一个数大
			{
				//交换两个数组元素的值
				temp = a[j - 1];
				a[j - 1] = a[j];
				a[j] = temp;
			}
		}
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\t", a[j]);
		if (i == 4)
			printf("\n");
	}
	return 0;
}

交换法排序

#include<stdio.h>
int main()
{
	int j, i;
	int a[10];
	int temp;
	printf("请输入数组的元素:\n");
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);
	}
	for (i = 0; i < 9; i++)//外层循环的下标为0~8
	{
		for (j =i+1; j <10; j++)//内层循环的下标为i+1~9
		{
			if (a[j] >a[i])//如果当前值比其他值小
			{
				//交换两个数组元素
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\t", a[i]);
		if (i == 4)
			printf("\n");
	}
	return 0;
}

插入法排序

#include<stdio.h>
int main()
{
	int i;
	int a[10];//声明一个整型数组
	int temp;//中间变量
	int pos;
	printf("请输入数组的元素:\n");
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);
	}
	for (i = 1; i < 10; i++)
	{
		temp = a[i];记录前一个数数组的下标位置
		pos = i - 1;//记录前一个数组元素的下标位置
		while ((pos >=0) && (temp <a[pos])) 
		{
			a[pos + 1] = a[pos];//插入到相应的位置 
			pos--;//每次插入一个值进行比较
		}
			a[pos + 1] = temp;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\t", a[i]);//输出制表位
		if (i == 4)
			printf("\n");//如果是第五个元素就输出换行
	}
	return 0;
}

折半法排序

#include<stdio.h>
void CelerityRun(int left, int right, int a[]);//定义函数
int main()
{
	int i;
	int a[10];
	printf("请输入数组的元素:\n");//打印要排序的数据
	for (i = 0; i < 10; i++)
	{
		scanf_s("%d", &a[i]);//输入数据
	}
	for (i = 0; i < 10; i++)//循环输出数组中的元素,在第五行进行换行
	{
		printf("%d\t", a[i]);
		if (i == 4)
			printf("\n");
	}
	printf("\n");
	return 0;
}
void CelerityRun(int left, int right, int a[])
{
	int i, j;//定义两个整型
	int middle, temp;//定义中间值和临时变量
	i = left;//j表示左侧下标
	j = right;//j表示右侧下标
	middle = a[left + right] / 2;//中间值的下标的位置
	do
	{
		//左侧的值小于中间值就取下一个值与中间值比较
		while ((a[i] < middle) && (i < right))
			i++;
		//右侧的值大于中间值就取下一个元素与中间值比较
		while ((a[j] > middle) && (j > left))
			j--;
		if (i < j)//判断i是否小于j,小于就交换
		{
			temp = a[i];
			a[i] = a[j];
			a[j] = temp;
			i++;
			j--;
		}
	} while (i < j);
	//if (left < j)
	//	//递归左半边
	//	CelerityRun(left, j, a);
	//if (right > i)
	//	//递归右半边
	//	CelerityRun(i, right, a);
}

排升序

给一组数据:99 、11、 15 、16、51、 56 、85 、65、 25、 52 ,数组里面有十个元素,将它们排成升序后的样子是:

对数组进行排序java 对数组进行排序的代码_排序算法

总结

插入法、冒泡法、交换法排序的速度较慢,但是参加排序的序列局部或整体有序时,这三种排序能达到较快的速度;在这种情况下,折半法排序反而显得速度满了,因为折半法排序是对于元素的个数(n)较大时,是速度最快的排序算法;但当(n)很小时,此方法比其他排序还要慢,当要排序的元素数量(n)较小时,对稳定性也不做要求,我们用选择法排序,对稳定性有要求我们用插入法或冒泡法比较好!