剖析选择排序

选择排序

方法一:

void Select_Sort(int *a,int n)

{

//int n=strlen(a);

int i,j;

int max,temp;

for(i=0;i<n;i++)

{

max = i;

for(j=i;j<n;j++)

{

if(a[max] < a[j])

max = j;

}

temp = a[i];

a[i] = a[max];

a[max] = temp;

}

}

方法二:逐步细化的方法

void print(int a[], int n,int i)

{

printf("%d趟:",i);

for(int j=0;j<n;j++)

printf("%4d",a[j]);

printf("\n");

}

int min(int a[],int n, int i)

{

int key=i;

for(int k=i+1;k<n;k++)

{

if(a[k]<a[key])

{

key = k;

}

}

return key;

}

void Select_Sort(int a[],int n)

{

int key,temp;

for(int i=0;i<n;i++)

{

key = min(a,n,i);

temp = a[key];

a[key] = a[i];

a[i] = temp;

}

}

选择排序算法---二元选择排序

void SelectSort2(int a[],int n)

{

int i,j,min,max,temp;

for(i=0;i<=n/2;i++)

{

max = i;

min = i;

for(j=i+1;j<=n-i-1;j++)

{

if(a[j]>a[max])

{

max = j;

}

if(a[j]<a[min])

{

min = j;

}

}

if(max!=n-i-1)

{

temp=a[n-i-1];

a[n-i-1]=a[max];

a[max]=temp;

}

if(min!=i)

{

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

}

}

时间: 2024-10-15 07:23:58

剖析选择排序的相关文章

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定

选择排序 —— 排序算法系列

假设我们有如下一个数组: 使用选择排序算法对这个数组进行排序,步骤如下: 第 1 次 在下标0到6之间找到最小的数字,我们可以发现最小的数字是15,它在下标为4的位置上: 把下标4上面的数字跟下标0上面的数字互换,得到排序如下图的数组: 第 2 次 在下标1到6之间找到最小的数字,我们可以发现最小的数字是33,它在下标为5的位置上: 把下标5上面的数字跟下标1上面的数字互换,得到排序如下图的数组: 第 3 次 在下标2到6之间找到最小的数字,我们可以发现最小的数字是48,它在下标为5的位置上:

八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与

数据结构-选择排序

选择排序 1.选择排序 //堆排序,向下调整子函数 void AdjustDown(int *a, size_t size, size_t root) { size_t parent = root; size_t child = parent * 2 + 1; while (child < size) { //选择孩子节点中较大的节点,与父亲节点交换 if (child + 1 < size&&a[child + 1] > a[child]) { ++child; } i

C语言选择排序

#include <stdio.h> //选择排序 void selectSort(int a[],int len){          //外层循环控制趟数,每一趟把一个最小数放到没有排序的序列第一个位置     int min;//保存最小的数的下标     for (int i=0; i<len-1; i++) {                  //假设一个最小值         min = i;                  //找实际的最小值的下标         fo

简单选择排序的C++实现

简单选择排序(simple selection sort)的基本思想: 第一次选择所有数组元素中最小的放到第一个位置,第二次从剩下的n-1个元素中选择最小的放到第二个位置,以此类推,直到剩下一个元素,放到最后的位置上. 基本步骤: (1)首先通过n-1次比较,从n个数组元素中找出最小的,将它与a[0]交换——第1趟选择排序,结果最小的数被安置在a[0]位置上. (2)再通过n-2次比较,从剩下的n-1个数组元素中找出次小的,将它与a[1]交换——第二趟选择排序,结果次小的放在a[1]的位置上.

算法学习之排序算法(三)(选择排序法)

1.引言 选择排序工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法.选择排序是和冒泡排序差不多的一种排序.和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最小的数据之后,才会发生交换.怎么交换呢?我们可以以下面一组数据作为测试: 2, 1, 5, 4, 9 第一次排序:1, 2, 5, 4, 9 第二次排序: 1, 2, 5, 4, 9 第三次排序: 1, 2, 4, 5, 9 第四次排序:

选择排序与python实现

1.算法思想 n 个元素,假设前 i 个元素已经排好序,从i+1到n个元素中选出最小的元素放在它在有序表中的最终位置上 2.代码实现 (1)非递归调用 def SelectionSort(A, n): for i in range(0, n-2): mini = i for j in range(i+1, n): if A[j] < A[mini]: i = j A[i],A[mini] = A[mini], A[i] #swap print A if __name__=='__main__':

选择排序的3种语言实现方法(C java python)

1.选择排序的思路是:遍历数组,第一遍找出所有成员的最小值,放到数组下标为0的位置,第二遍从剩余内容中,再次找出最小值,放到数组下标为1的位置,以此类推,遍历完成所有的数组内容,最后结果就是:数组是按照从小到大顺序进行排序的. 2.按照C语言.java.python的顺序,分别实现如下,在对应编译平台上都是编译通过的: C语言版本: #include <stdio.h> int main() { int i; int j; int temp; int origin[] = {2,1,4,3,5