//排序--选择排序法 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> /* 选择排序(Selection sort)是一种简单直观的排序算法。 它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素, 存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。 选择排序 创建一个有序数组A, 第一步:找出无序数组B中的最小的元素 把他放置在有序数组A的第一个位置,从无序数组B中将该元素删除 第二步:继续找出无序数组B中的最小的元素 把他放置在有序数组A的第二个位置,从无序数组B中将该元素删除 选择排序&冒泡排序&插入排序: 选择排序每一轮都会遍历无序数组一遍, 插入排序每一轮都会遍历有序数组一遍, 冒泡排序不存在有序数组和无序数组的概念,只是通过相邻元素的交换 将最值元素放到数组的一端 */ //选择法排序 void SelectionSort(int * arr, int num){ if (arr==NULL) { printf("传入参数不可以为空!\n"); return; } int i = 0, j = 0,k=0,temp=0; for (i = 0; i < num; i++) { //假设k是最小元素的下标 k = i; for (j = i+1; j < num; j++) { //k初始化为0 当j=1是 正好是arr[0] vs arr[1] 没有漏掉任何一个元素 if (arr[j]<arr[k]) { //发现比下标为k的元素 更小的元素 改变k的值 //改变之后 k这个下标的元素现在是最小的了 k = j; } } //交换最小元素和第0个元素的值---一轮循环完了再进行交换 if (k != i) { temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } } //打印数组 void Print(int * arr,int num){ if (arr == NULL) { printf("传入参数不可以为空!\n"); return; } int i = 0; for (int i = 0; i < num; i++) { printf("%5d", *(arr + i)); } printf("\n"); } void Test(){ int i = 0; int arr[10] = { 0 }; //定义时间类型变量 time_t ts; //生成随机数种子 srand((unsigned int)time(&ts)); for (i = 0; i < 10; i++) { arr[i] = (int)(rand() % 100); } //打印数组 printf("\n原始数据----\n"); Print(arr, 10); //选择法排序 printf("选择法排序之后的数据\n"); SelectionSort(arr, 10); Print(arr, 10); } void main(){ Test(); system("pause"); }
数据结构 排序(选择排序)
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:数据结构 排序(冒泡排序升级版)
下一篇:数据结构 排序(插入排序)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
排序算法之计数排序的优化
排序算法之计数排序的优化
数组 计数排序 最小值 -
数据结构|冒泡排序与选择排序
欢迎点击「算法与编程之美」↑关注我们!本文首发于:"算法与编程之美",欢迎关注
冒泡排序 选择排序 编程之美 -
数据结构之选择排序
数据结构之选择排序
数据 数组 基本方法 i++ 最小值 -
数据结构排序系列之选择排序(三)
1.选择排序选择排序有直接选择排序和堆排序。基本思想:每一趟在待排序的记录中选出关键字最小的元素,依次存放在
二叉树 数据结构 堆排序 算法 结点 -
数据结构简单选择排序
简单选择排序设有一组初始关键字序列为(24,35,12,27,18,26),则第3趟简单选择排序结束后的
选择排序 简单选择排序 数据结构排序算法 html