C++ 选择排序法

选择排序:

已知一组无序数据a[1]、a[2]、、、、a[n],假如将其按升序排列。

首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。

再比较a[1]与a[3]的值,若a[1]大于a[3]则交换两者的值,否则不变。

再比较a[1]与a[4],依此类推,最后比较a[1]与a[n]的值。

这样处理一轮后,a[1]的值一定是这组数据中最小的。

再将a[2]与a[3],a[4],,,,a[n]以相同方法比较一轮,则a[2]的值一定是a[2]到a[n]中最小的。

再将a[3]与a[4]到a[n]以相同方法比较一轮,依此类推。

共处理n-1轮后a[1]、a[2]、、、、a[n]就以升序排列了。

特点是:

(1)优点:稳定,比较次数与冒泡排序一样,数据移动次数比冒泡排序少;

(2)缺点:相对之下还是慢。

具体代码:

<span style="font-size:18px;"># include <stdio.h>
main() {
	int a[10],i,j,k,t,n=10;
	printf("请输入10个数:");
	for(i=0;i<10;i++)
	scanf("%d",&a[i]);            /*给数组a[]赋值*/   

               for(i=0;i<n-1;i++)     /*外层循环控制次数,n个数循环n-1次,因为不需与自己比较大小*/
	      {
		k=i;                           /*把a[]数组的的首元素赋值给k ,假设a[k]是一个极值*/
		for(j=i+1;j<n;j++ )  /*从下一个数到最后一个数之间找最值*/
			if(a[k]>a[j])      /*若其后有比最值更大的*/
                        k=j;                   /*则将其下标记在k中*/
			if(k!=i)             /*如果k不为最初的i值,说明在其后找到比其更大的数*/
			{
                            t=a[k];
                           a[k]=a[i];
                          a[i]=t;  }   /*则交换最值和当前序列的第一个数*/
 }
	printf("The sorted numbers: ");
	for(i=0;i<10;i++)
       printf("%d   ",a[i]);   printf("\n");
}  </span>
时间: 2024-10-11 17:50:59

C++ 选择排序法的相关文章

javascript选择排序法

选择排序原理: 1.第一次遍历中,找到最小的数组元素然后用第一个数组元素交换它. 2.第二次遍历中,找到第二小的数组元素然后用第二个数组元素交换它. 3.依次类推.如果包含N个元素,那么将在最多N-1次遍历之后完成排序. 示例: 示例结果显示: <!doctype html><html><head><meta charset="utf-8"><title>选择排序法</title><script> va

常用排序法之一 ——冒泡排序法和选择排序法

语言中,常用的算法有:冒泡排序.快速排序.插入排序.选择排序.希尔排序.堆排序以及归并排序等等.那么从这篇开始,我将分别总结下这几种排序法. 先交代一下,我们将要排序的数组定义为arr[N],即数组arr[]包含N个元素. ## 冒泡排序法(Bubblesort) ## 所谓排序法,就是对一组无序的序列进行有序的排序(从大到小或者从小到大),那么什么叫冒泡排序法,冒泡排序法又是怎么实现数组的有序排列呢. 冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较**(`a

算法大神之路----排序(选择排序法)

选择排序法,顾名思义,就是把特定的数据选择出来进行排序. 选择排序法有两种方式 在所有的数据中,当由大到小排序,那么就将最大值放到第一个位置 如果由小到大排序,那么就将最小值放到第一个位置 以由小到大排序举例,当排序时候,扫描整个数据,拿第一个依次与其他做比较,如果其他数据比第一个大,或者相等,那么就不交换,如果其他数据比第一个数小,那么就交换二者的位置,扫描结束后,则从第二个数开始,依次扫描. 方法分析 无论是最坏还是最好情况,甚至是平均情况下,都需要对全部数据进行扫描,找到最大或最小值,因此

使用选择排序法对数组进行排序

int[] array = new int[10]; //生成随机数对象 Random random = new Random(); for (int i = 0; i < array.length; i++) { array[i] = random.nextInt(50); System.out.print(array[i]+" "); } System.out.println("\n排序后:"); int index; for (int i = 1; i 

java冒泡算法和选择排序法

1 package test.auto; 2 3 import java.util.Arrays; 4 5 import org.apache.bcel.generic.FieldGenOrMethodGen; 6 7 public class Maopao0807{ 8 9 public static void main(String[] args) { 10 //冒泡,每个相邻进行比较 11 int a[]={ 6, 5, 3, 1, 8, 7, 2, 4 , 0}; 12 for (int

PHP 选择排序法

选择排序法的思路就是再第一次循环中,假设第一个数是最小的:然后跟第二个数比较,一直比到最后,找出最小值,然后把最小值跟第一个数的位置互换:再进行下一次循环,找出最小值跟第二个位置的数互换:一直循环数组的个数减去1次:数组就成了有序的了: <?php $arr=array(3,1,7,-1); for ($i=0;$i<count($arr)-1;$i++){     $min=$arr[$i];     $mindex=$i;   for ($j=$i+1;$j<count($arr);

实例365(13)---------经典数组排序方法------选择排序法

一:使用选择排序法对一维数组进行排序,截图 /*选择排序的个人理解:第一遍筛选,选出其中最大的值,得到值和下标 将最大的值的位置和数组的第一个位置交换 从数组的第二个位置开始第二遍筛选 将其中最大的值的位置和数组的第二个位置交换 直到筛选完数组 */ 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; u

算法之旅 | 选择排序法

算法之旅 | 选择排序法 HTML5学堂-码匠:数据快速的计算与排序,与前端页面性能有直接的关系.由于排序的算法有很多,在本次"算法系列"的分享当中,我们先从简单易上手的选择排序法开始,其它的排序算法会随后陆续跟大家一起分享. 算法的基本概念 算法是什么,它有何作用 为解决一个问题而采取的方法和步骤,称为算法. 我们可以把算法看成一本"福字剪纸教程",其中每一种算法就是剪纸教程中的一种包含"固定步骤"的剪纸方法,使用者只要按照步骤进行剪纸,就可以

二、选择排序法将用户输入的数降序

//选择排序法原理是让第一个数分别和后面的数比较,将大的放到第一个位置上,然后让第二个数分别跟后面数比较.... //这里我们用循环实现,首先控制第一个数不变,定义一个变量i计每趟比较的次数,定义一个变量j来控制比较的趟数 int i, j; int[] a = new int[10]; //声明一个数组来放我们生成的数据,其长度为10 int t = 0; for (i = 0; i < a.Length; i++) { Console.Write("请输入第"+(i+1)+&

冒泡法和选择排序法(比较容易写混)

1 #include<stdio.h> 2 3 4 //冒泡排序法 5 6 void bubbling(int a[],int n); 7 8 //选择排序法 9 void choose(int a[],int n); 10 int main() 11 { 12 int i; 13 int s[6]; 14 printf("please enter five numbers:\n"); 15 for(i=1;i<6;i++) 16 { 17 scanf("%