欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言学习笔记:排序方法:冒泡排序、选择排序、插入排序

程序员文章站 2022-07-15 08:46:53
...

一:冒泡排序

//一次次比较    把最大的放到最后
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void)
{

	int a[] = { 2, 4, 6, 5, 3, 1 };
	int i = 0;
	int j = 0;
	int n = 6;
	int tmp = 0;
	printf("排序前:");
	for (i = 0; i < n; i++)
	{
		printf("%d   ", a[i]);
	}
	printf("\n");
	//排序
	for (i = 0; i < n - 1; i++)
	{
		for (j = 0; j<n - i - 1; j++)
		{
			if (a[j]>a[j + 1])
			{
				tmp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = tmp;
			}
		}
	}

	printf("排序后:");
	for (i = 0; i < n; i++)
	{
		printf("%d   ", a[i]);
	}

	printf("\n");
	system("pause");
	return 0;
}

二:选择排序

//和冒泡思想差不多   它是把最小的放到最前   换汤不换药
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void)
{
	int a[] = { 2, 4, 6, 5, 3, 1 };
	int i = 0;
	int j = 0;
	int n = 6;
	int tmp = 0;
	printf("排序前:");
	for (i = 0; i < n; i++)
	{
		printf("%d   ", a[i]);
	}
	printf("\n");
	//排序
	for (i = 0; i < n - 1; i++)
	{
		for (j = i + 1; j<n; j++)
		{
			if (a[i]>a[j])
			{
				tmp = a[i];
				a[i] = a[j];
				a[j] = tmp;
			}
		}
	}

	printf("排序后:");
	for (i = 0; i < n; i++)
	{
		printf("%d   ", a[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}

三:插入排序

//插入值在有序中比较   大的往后移一位   找到正确位置后赋值
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void)
{
	int a[] = { 2, 4, 6, 5, 3, 1 };
	int i = 0;
	int j = 0;
	int n = 6;
	int tmp = 0;
	printf("排序前:");
	for ( i = 0; i < n; i++)
	{
		printf("%d   ", a[i]);
	}
	printf("\n");
	//排序
	for (i =0; i<n; ++i)
	{
		tmp = a[i];//要插入的值
		for (j = i - 1; j>=0 && a[j] > tmp; j--)
		{
			a[j + 1] = a[j];//向后移位
		}
		a[j + 1] = tmp;//位置赋值
	}

	printf("排序后:");
	for (i = 0; i < n; i++)
	{
		printf("%d   ", a[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}

插入的递归思想:
转自:http://blog.csdn.net/morewindows/article/details/6665714

void Insert(int *a, int n)//把数组a的第n个数插入前n-1个数中,注意前n-1个数已经是排好序的了
{
	int i = n - 1;
	int key = a[n];
	while ((i >= 0) && (key < a[i]))
	{
		a[i + 1] = a[i];
		i--;
	}
	a[i + 1] = key;
	return;
}

void InsertionSort(int *a, int n)//递归插入,跟求阶乘的思想一样,前n-1个排好序的数组,是建立在前n-2个排好序的数组的基础上插出来的
{
	if (n > 0)
	{
		InsertionSort(a, n - 1);
		Insert(a, n);
	}
	else
		return;
}

相关标签: C语言笔记