C言语选择排序算法及代码

选择排序是排序算法的一种,这里以从小到大排序为例停止解说。

根本思惟及举例阐明

选择排序(从小到大)的根本思惟是,起首,选出最小的数,放在第一个地位;然后,选出第二小的数,放在第二个地位;以此类推,直到一切的数从小到大排序。
在完成上,我们平日是先肯定第i小的数地点的地位,然后,将其与第i个数停止交流。
下面,以对 3  2  4  1 停止选择排序阐明排序进程,运用min_index 记载以后最小的数地点的地位。
第1轮 排序进程 (寻觅第1小的数地点的地位)
3  2  4  1(最后, min_index=1)
3  2  4  1(3 > 2, 所以min_index=2)
3  2  4  1(2 < 4, 所以 min_index=2)
3  2  4  1(2 > 1, 所以 min_index=4, 这时分肯定了第1小的数在地位4)
1  2  4  3 (第1轮后果,将3和1交流,也就是地位1和地位4交流)
第2轮 排序进程 (寻觅第2小的数地点的地位)
1  2  4  3(第1轮后果, min_index=2,只需求从地位2开端寻觅)
1  2  4  3(4 > 2, 所以min_index=2)
1  2  4  3(3 > 2, 所以 min_index=2)
1  2  4  3(第2轮后果,由于min_index地位刚好在第2个地位,无需交流)
第3轮 排序进程 (寻觅第3小的数地点的地位)
1  2  4  3(第2轮后果, min_index=3,只需求从地位2开端寻觅)
1  2  4  3(4 > 3, 所以min_index=4)
1  2  3  4(第3轮后果,将3和4交流,也就是地位4和地位3交流)
至此,排序终了。

总结及完成

选择排序对巨细为N的无序数组R[N]停止排序,停止N-1轮选择进程。第i轮拔取第i小的数,并将其放在第i个地位上。当第N-1次完成时,第N小(也就是最大)的数天然在最初的地位上。
下面给出选择排序的C言语完成。

			#include<stdio.h> #include<stdlib.h> #define N 8 void select_sort(int a[],int n); //选择排序完成 void select_sort(int a[],int n)//n为数组a的元素个数 { //停止N-1轮选择 for(int i=0; i<n-1; i++) { int min_index = i; //找出第i小的数地点的地位 for(int j=i+1; j<n; j++) { if(a[j] < a[min_index]) { min_index = j; } } //将第i小的数,放在第i个地位;假如刚好,就不必交流 if( i != min_index) { int temp = a[i]; a[i] = a[min_index]; a[min_index] = temp; } } } int main() { int num[N] = {89, 38, 11, 78, 96, 44, 19, 25}; select_sort(num, N); for(int i=0; i<N; i++) printf("%d  ", num[i]); printf("\n"); system("pause"); return 0; }

留意:选择排序是一种不波动的排序算法,能够会打乱两个相反数字的原有次序。
例如,序列 5  8  5  2  9, 依照从小到大排序,第一轮会将第1个数字5会和2交流,那么原序列中2个5的绝对前后次序就被毁坏了,所以选择排序是一种不波动的排序算法。

时间: 2024-10-19 16:49:58

C言语选择排序算法及代码的相关文章

简单的选择排序算法实现代码

1 #include<stdio.h> 2 #define N 12 3 //length统计数组的长度 返回最后元素的下标 4 int length(int a [N]){ 5 for(int i = 0;i<=N;i++){ 6 if(a[i]==0) return i-1; 7 8 } 9 } 10 //打印输出数组元素 11 void show(int a[N]){ 12 for(int i= 0;i<N;i++){ 13 if(a[i]!=0) printf("

C言语疾速排序算法及代码

疾速排序是对冒泡法排序的一种改良.疾速排序算法 的根本思惟是:将所要停止排序的数分为阁下两个局部,个中一局部的一切数据都比别的一 局部的数据小,然后将所分得的两局部数据停止异样的划分,反复履行以上的划分操作,直 到一切要停止排序的数据变为有序为止.能够仅依据根本思惟对疾速排序的看法并不深,接下来以对n个无序数列A[0], A[1]-, A[n-1]采取疾速排序办法停止升序陈列为例停止解说.(1)界说两个变量low和high,将low.high辨别设置为要停止排序的序列的肇端元素和最初一个元素的下

Python实现各种排序算法的代码示例总结

Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示例总结,其实Python是非常好的算法入门学习时的配套高级语言,需要的朋友可以参考下 在Python实践中,我们往往遇到排序问题,比如在对搜索结果打分的排序(没有排序就没有Google等搜索引擎的存在),当然,这样的例子数不胜数.<数据结构>也会花大量篇幅讲解排序.之前一段时间,由于需要,我复习了

选择排序算法(排序详解)

直接插入排序(Selection Sort)算法 1.基本思想: 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面). n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: ①初始状态:无序区为R[1..n],有序区为空.

各种排序算法的代码

1 // ALLKindsOfSorts.cpp : 定义控制台应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include<iostream> 6 #include<vector> 7 #include<bitset> 8 9 using namespace std; 10 11 ////////////////////////////////////////所有的排序总结///////////////////

简单排序之选择排序算法JAVA实现

选择排序原理 选择排序是一种简单排序算法.这是一个基于位置比较的算法,通常实现是左边是已经排好序的元素列表,右边是待排序的元素.当然,一开始的时候,我们认为都是未经排序的. 选择排序的精髓:与冒泡排序不同,选择排序是第N趟排序先确定最小元素的位置,然后和第N个元素交换位置.主要特点是每一趟选择一个最小值的索引作为梅一堂最后交换的位置.以一个元素个数为N的整形数组arr为例: 第一趟 以第一个元素arr[0]为基准,准备好一个中间变量temp用来记录该趟最小元素的位置,一开始,temp=0,比较a

基于Java实现的选择排序算法

选择排序和冒泡排序同样是基础排序算法,现在也做个学习积累. 简述 选择排序算法较为稳定,基本上都是O(n2)的时间复杂度,规模越小排序越快,不需要占用额外空间.其实选择排序原理很简单,就是在未排序序列中找到最小(大)的元素然后放到数组前面,然后再从剩下的未排序序列中找到最小(大)的元素放在上一次找到最小(大)元素的后面,以此类推完成排序. 动图演示 看下动图上的演示,就能够找出排序规律,非常之简明易懂. (算法动图来源于参考资料,详细请往下翻阅) 代码实现 1 /** 2 * 选择排序 3 *

链表上的冒泡、选择排序算法

做如下定义 typedef struct LNode { int num; char name[20]; struct LNode *next; } LNode, *LinkList; 冒泡排序算法 void BubbleSort(LinkList &L) { LinkList i = NULL, j = NULL; for (i = L; i->next->next != NULL; i = i->next) { for (j =i ; j->next->next

排序算法总结---代码+性能

// data_sort_alg.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "sort_alg.h" #include <iostream> #include <vector> void show(std::vector<int> &a) { std::vector<int>::iterator it=a.begin(); while(it!=a.