C语言中常用排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、堆排序)实现比较

版权声明:版权所有,如需转载请联系作者邮箱:[email protected] https://blog.csdn.net/gaojixu/article/details/83447047
以下程序在win10 X64位操作系统,使用VS2017运行验证可行

排序是非常重要且很常用的一种操作,有冒泡排序、选择排序、插入排序、希尔排序、快速排序、堆排序等多种方法。

实例1 冒泡法排序

1.前言: 数组中有N个整数,用冒泡法将它们从小到大(或从大到小)排序。冒泡法较慢;

2.算法步骤:
冒泡法效率是最低的,但算法简单:

  • 从第一个数开始,相邻两个数两两比较,将大的交换到后面,然后继续比较第2、3个数……,遍历结束之后最小的数就在最前面了;

  • 将最前面的最小的数排除在外,其余数重复步骤1。

  • 重复步骤2,直到所有数都排好为止。

3.示例程序:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>


//将数组中的元素进行排序
void sort_array(int array[], int num)
{
	int i;
	int j;
	for (i = 0; i < num; i++)//这里等价于:for(i = 0; i < num -1; i++)
	{
		for (j = 1; j < num - i; j++)//这里等价于:for(j = 0; i < num - i -1; j++)
		{
			if (array[j - 1] > array[j])
			{
				int tmp;
				tmp = array[j];
				array[j] = array[j - 1];
				array[j - 1] = tmp;
			}
		}
	}
}



//将排序之后的数组打印出来

void print_array(int array[], int num)
{
	int i = 0;
	for (i = 0; i < num; i++)
	{
		printf("array[%d] = %d\n", i, array[i]);
	}

}


int main()
{
	int array[] = { 1,4,8,0,9,34,98,100,5,3 };
	int num = sizeof(array) / sizeof(int);//求出数组元素的长度

	sort_array(array, num);
	print_array(array, num);
	
	system("pause");
	return 0;
}

程序运行结果:
array[0] = 0
array[1] = 1
array[2] = 3
array[3] = 4
array[4] = 5
array[5] = 8
array[6] = 9
array[7] = 34
array[8] = 98
array[9] = 100


实例2 选择法排序

1.前言: 数组中有N个整数,用选择法将它们从小到大排序。其速度比冒泡法快;

2.算法步骤:

  • 找出一个最小数,一般默认数组中的第一个元素为最小的元素,然后遍历后面的所有的元素,分别与这个最小的元素进行比较,如果比最小的元素还小就交换位置,一轮之后数组中最小的元素排到了最前面;

  • 在剩下的数里面,再找一个最小的,交换到剩下数的最前面;

  • 重复步骤2 ,直到所有数都已排好;

3.示例程序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//打印数组中的元素
void print_array(int *array, int num)
{
	int i = 0;
	for (i = 0; i < num; i++)
	{
		printf("%d \n", array[i]);
	}
}


//选择法进行排序

//如果数组作为函数参数,则数组形参退化为指针
void sort_array(int *array, int num)//等价于:void sort_array(int array[],int num)
{
	int i = 0;
	int j = 0;
	int tmp = 0;
	for (i = 0; i < num - 1; i++)
	{
		for (j = i + 1; j < num; j++)
		{
			if (array[i] > array[j])
			{
				tmp = array[i];
				array[i] = array[j];
				array[j] = tmp;
			}
		}
	}

}


int main(void)
{
	int array[] = { 1,4,6,9,0,4,3,5,2 };
	int num = 0;
	num = sizeof(array) / sizeof(array[0]);



	printf("after = \n");
	sort_array(array, num);
	print_array(array, num);

	system("pause");
	return 0;
}

程序运行结果:
after =
0
1
2
3
4
4
5
6
9


其他算法将会尽快补齐;

猜你喜欢

转载自blog.csdn.net/gaojixu/article/details/83447047