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

九大排序算法之选择排序20210512

程序员文章站 2024-03-01 16:57:46
...

1、算法思想:选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。

2、算法过程

举个栗子(第一趟的排序过程)

原始序列:49、38、65、97、76、13、27、49

1)在进行选择排序过程中分成有序和无序两个部分,开始都是无序序列

结果:49、38、65、97、76、13、27、49

2)从无序序列中取出最小的元素13,将13同无序序列第一个元素交换,此时产生仅含一个元素的有序序列,无序序列减一

结果:{13、}   {38、65、97、76、49、27、49}

3)从无序序列中取出最小的元素27,将27同无序序列第一个元素交换,此时产生仅两个元素的有序序列,无序序列减一

结果:{13、27、}   {65、97、76、49、38、49}

4)从无序序列中取出最小的元素38,将38同无序序列第一个元素交换,此时产生含三个元素的有序序列,无序序列减一

结果:{13、27、38、}   {97、76、49、65、49}

5)从无序序列中取出最小的元素49,将49同无序序列第一个元素交换,此时产生含四个个元素的有序序列,无序序列减一

结果:{13、27、38、49、}   {76、97、65、49}

6)从无序序列中取出最小的元素49,将49同无序序列第一个元素交换,此时产生含五个元素的有序序列,无序序列减一

结果:{13、27、38、49、49、}   {97、65、76}

7)从无序序列中取出最小的元素65,将65同无序序列第一个元素交换,此时产生含六个元素的有序序列,无序序列减一

结果:{13、27、38、49、49、65}   {97、76}

8)从无序序列中取出最小的元素76,将76同无序序列第一个元素交换,此时产生含七个元素的有序序列,无序序列减一

结果:{13、27、38、49、49、65、76、}   {97}

9)最后一个元素肯定是最大元素,无序排序直接生产一个有序的序列

结果:{13、27、38、49、49、65、76、97}
代码如下:

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

void selectSort(int* arr, int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		int index = i;
		int j;
		for (j = i + 1; j < n; j++)
		{
			if (arr[j] < arr[index])
			{
				index = j;
			}
		}
		int tmp = arr[index];
		arr[index] = arr[i];
		arr[i] = tmp;
	}
}

void printArray(int* arr, int n)
{
	if (arr == NULL || n <= 0)
	{
		printf("parameter is null error!\n");
		return;
	}
	int i;
	for (i = 0; i < n; i++)
	{
		if (i == n - 1)
		{
			printf("%d", arr[i]);
		}
		else
		{
			printf("%d,", arr[i]);
		}
	}
	printf("\n");
}

int main()
{
	int array[] = { 49,38,65,97,76,13,27,50 };
	int ncount = sizeof(array) / sizeof(array[0]);
	printf("ncount=%d\n", ncount);
	selectSort(array, ncount);
	printArray(array, ncount);
	system("pause");
	return 0;
}

 

相关标签: 编程语言 编程