排序的实现

Posted 通信汪的美好生活

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序的实现相关的知识,希望对你有一定的参考价值。

一、选择排序

下面是第一种的代码和运行结果,可以自己把手动输入改为直接赋值 

#include<stdio.h>
#pragma warning(disable:4996)//我使用的是Microsoft Visual Studio,没有这句话会报错
void sort(int x[], int n);
int main()
{
	
	int i,  a[10];
	for (i = 0; i < 10; i++)
	{
		printf("请输入任意十个数,还需要输入:%d个数\\n",10-i);
		scanf("%d", &a[i]);
	}
	sort(a, 10);
	printf("从大到小顺序:\\n");
	for ( i = 0; i < 10; i++)
	{
		printf("%d\\n", a[i]);
	}
	printf("\\n");
	return 0;
}

void sort(int x[], int n)
{
	int i, j, k = 0, t;
	for (i = 0; i < n - 1; i++)
	{
		for (j = i+1;j < n; j++)
			if (x[j] > x[k])
				k = j;
		if (k != i)
		{
			t = x[i];
			x[i] = x[k];
			x[k] = t;
		}
	}
}

 

选择排序代码运行结果

二、正反顺序的颠倒

#include<stdio.h>
#pragma warning(disable:4996)//我使用的是Microsoft Visual Studio,没有这句话会报错
void inv(int x[], int n);
int main()
{

	int i, a[10];
	for (i = 0; i < 10; i++)
	{
		printf("请输入任意十个数,还需要输入:%d个数\\n", 10 - i);
		scanf("%d", &a[i]);
	}
	inv(a, 10);
	printf("反序输出:\\n");
	for (i = 0; i < 10; i++)
	{
		printf("%d\\n", a[i]);
	}
	printf("\\n");
	return 0;
}
void inv(int x[], int n)//方法一
{
	int temp, *i, *j;
	i = x, j = x + n - 1;
	for (;i<j;i++,j--)
	{
		temp = *i;
		*i = *j;
		*j = temp;
	}

}
//void inv(int x[], int n)//方法二
//{
//	int temp,i,j,m=(n-1)/2;
//	for (i = 0; i <=m; i++)
//	{
//		j = n - 1 - i;
//		temp= x[i];
//		x[i] = x[j];
//		x[j] = temp;
//	}
//	
//}
正反顺序的颠倒代码现象

以上是关于排序的实现的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

以下代码片段的时间复杂度是多少?

markdown 数组排序片段

Java排序算法 - 堆排序的代码

Realm和RecyclerView项目排序和自动ViewPager片段通信