//排序--选择排序法 #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"); }
时间: 2024-10-11 01:35:48