当前位置:   article > 正文

常用七种排序算法(C语言实现,含图解)_c语言几种排序方法图解

c语言几种排序方法图解

常用排序算法

一、冒泡算法

1.1 基本思想:

相邻两两比较,较大的下沉,较小的上升,第一轮之后最小的数就被放到了第一个位置,以此类推。

1.2 优化:

若某一次完了之后已经排好序,则没必要进行到len-1次,可用一个flag,没有交换之后就没必要再进行下去了 。

1.3 测试代码
#include <stdio.h>
#include <stdlib.h>
void bubbleSort(int a[],int length)
{
	int len = length;
	int temp;//中间变量
	bool flag;//优化标志,判断是否有交换 
	for(int i=0;i<len;i++)
	{
		flag = false;
		for(int j=len-1; j>i; j--)
		{
			if(a[j]<a[j-1])
			{
				temp=a[j-1];
				a[j-1]=a[j];
				a[j]=temp;
				flag=true;
			}
		}
		if(!flag)break;
	} 
}

int main(void)
{
	int A[] = {6,5,3,1,8,7,2,4,9};
	int lengthA=9;
	printf("原始数组:\n");
	for(int i=0;i<lengthA;i++)
	{
		printf("%d",A[i]);
	}
	printf("\n\n");
	
	bubbleSort(A,lengthA);                  //冒泡排序
	//selectionSort(A,lengthA);	            //选择排序
	//insertSort(A,lengthA);			    //插入排序
	//shellSort(A,lengthA);                 //希尔排序
	//mergeSort1(A,0,lengthA-1,(int*)malloc(sizeof(int)*lengthA)); //归并排序(递归)
	//mergeSort2(A,lengthA);                //归并排序(非递归)
	//heapSort(A,lengthA);                  //堆排序
	//quickSort1(A,0,lengthA-1);            //快排序方法一
	//quickSort2(A,lengthA);                //快排方法二
	
	printf("排序结果:\n");
	for(int i=0;i<lengthA;i++)
	{
		printf("%d",A[i]);
	}
	printf("\n\n");
	
	return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

二、选择排序

2.1 基本思想:

一开始就从原始序列中找到最小的元素,放到序列的起始位置作为已排序序列,然后在剩下的未排序的元素中继续寻找最小的元素,放到已排序的序列末尾,以此类推,直到所有的元素排列完毕。

2.2 测试代码(main函数参考冒泡排序的测试代码)
void selectionSort(int a[],int length)
{
	int len = length;
	int minIndex;
	int temp;
	for(int i=0;i<len;i++)
	{
		minIndex=i;
		for(int j=i+1; j<len; j++)
		{
			if(a[j]<a[minIndex])
			{
				minIndex = j;
			}
		}
		if(minIndex != i)
		{
			temp = a[i];
			a[i] = a[minIndex];
			a[minIndex] = temp;
		}
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

三、插入排序

3.1 基本思想:

在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 插入排序在实现上,常采用in-place排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

3.2 具体算法描述:
  1. 从第一个元素开始,该元素可以认为已经被排序;
  2. 取出下一个元素,在已经排序好的元素序列中从后往前扫描;
  3. 如果该元素(已排序)大于新元素
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/278010
推荐阅读
相关标签
  

闽ICP备14008679号