本文目录一览

1,c语言选择排序是怎么实现的 思路是什么

在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。简单选择排序的示例:

c语言选择排序是怎么实现的 思路是什么

2,选择排序 和 简单选择排序 有什么区别C语言

选择排序每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。冒泡排序:冒泡排序(bubblesort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

选择排序 和 简单选择排序 有什么区别C语言

3,书写简单选择排序完成下列函数

void select Sory (int r[ ], int length) /*对整型数组r做简单选择排序,length为元素的个数,从小到大排序*/ { n=length; for (i=1; i<=n-1; i++) { for (j=i+1; j<=n; j++) if(r[j]

书写简单选择排序完成下列函数

4,选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。选择排序的时间复杂度:选择排序的交换操作介于 0 和 (n - 1)次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

5,关于简单选择排序直接插入排序和冒泡排序

帮你修改好了。 你的程序错误太多了。 你之前学过更高级的语言吧?居然这样用:R[i].key>R[j].key #include #include #include #define datatype int void SelectSort(datatype R[],int n) { int i,k,j; for(i=1;iR[j+1].key) if(R[j]>R[j+1]) { R[0]=R[j]; R[j]=R[j+1]; R[j+1]=R[0]; swap=1; } if(swap==0)break; } } void D_InsertSort(datatype R[],int n) { int i,j; for(i=2;i<=n;i++) //if(R[i].key

6,选择排序法的基本思想

选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列:初始序列:第1趟:12与49交换:12 第2趟:27不动 :12 27 第3趟:65与38交换:12 27 38 第4趟:97与49交换:12 27 38 49 第5趟:76与65交换:12 27 38 49 65 第6趟:97与76交换:12 27 38 49 65 76 97 完成简单选择排序的算法具体描述如下:void SelectSort(RecordType r[], int length) /*对记录数组r做简单选择排序,length为待排序记录的个数*/int temp;for ( i=0 ; i< length-1 ; i++) //n-1趟排序int index=i; //假设index处对应的数组元素是最小的for ( j=i+1 ; j < length ; j++)  //查找最小记录的位置if (r[j].key < r[index].key )index=j;if ( index!=i)  //若无序区第一个元素不是无序区中最小元素,则进行交换}}

7,选择排序 和 简单选择排序 有什么区别C语言

选择排序每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。冒泡排序:冒泡排序(bubblesort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

8,选择排序法的算法

简单选择排序算法分析:在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。最坏情况下,需要移动记录的次数最多为3(n-1)(此情况中待排序记录并非完全逆序,给完全逆序记录排序的移动次数应为(n/2)*3,其中n/2向下取整)。简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是∑ =(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n2)。选择排序法 是对 定位比较交换法(也就是冒泡排序法) 的一种改进。在讲选择排序法之前我们先来了解一下定位比较交换法。为了便于理解,设有10个数分别存在数组元素a[0]~a[9]中。定位比较交换法是由大到小依次定位a[0]~a[9]中恰当的值(和武林大会中的比武差不多),a[9]中放的自然是最小的数。如定位a[0],先假定a[0]中当前值是最大数,a[0]与后面的元素一一比较,如果a[4]更大,则将a[0]、a[4]交换,a[0]已更新再与后面的a[5]~a[9]比较,如果a[8]还要大,则将a[0]、a[8]交换,a[0]又是新数,再与a[9]比较。一轮比完以后,a[0]就是最大的数了,本次比武的武状元诞生了,接下来从a[1]开始,因为状元要休息了,再来一轮a[1]就是次大的数,也就是榜眼,然后从a[2]开始,比出探花,真成比武大会了,当比到a[8]以后,排序就完成了。下面给大家一个例子:int main(void)int a[10];int i,j,t;for ( i = 0; i < 10; i ++ ) scanf("%d",&a[ i ]); /*输入10个数,比武报名,报名费用10000¥ ^_^*/for ( i = 0; i < 9; i ++ )for ( j = i + 1; j < 10; j ++)if ( a[ i ] < a[ j ] ) for( i = 0; i < 10; i ++) printf("%4d",a[ i ]); /*显示排序后的结果*/return 0;}好啦,啰嗦了半天总算把定位比较排序法讲完了,这个方法不错,容易理解,就是有点麻烦,一把椅子换来换去,哎~所以就有了下面的选择排序法,开始的时候椅子谁也不给,放在一边让大家看着,找个人k记录比赛结果,然后发椅子。具体来讲呢就是,改进定位比较排序法,但是这个改进只是一部分,比较的次数没变,该怎么打还是怎么打,就是不用换椅子了。每次外循环先将定位元素的小标i值记录到K,认为a[k]是最大元素其实k=i还是a[ i ]最大,a[k]与后面的元素一一比较,该交换的也交换,就是把K的值改变一下就完了,最后在把a[k]与a[ i ]交换,这样a就是最大的元素了。然后进入下一轮的比较。选择排序法与定位比较排序法相比较,比的次数没变,交换的次数减少了。下面也写个例子:由大到小时:int main(void)int a[10];int i,j,t,k;for ( i = 0; i < 10; i ++ ) scanf("%d",&a[ i ]); /*输入10个数,比武报名,报名费用10000¥ ^_^*/for ( i = 0;i < 9;i ++ ) /*10个数,所以只需比9次*/k = i; /*裁判AND记者实时追踪报道比赛情况*/for ( j = i + 1; j < 10; j ++)if ( a[ k ] < a[ j ] ) k = j; /*使a[k]始终表示已比较的数中的最大数*/if (k!=i)}for( i = 0; i < 10; i ++) printf("%4d",a[ i ]); /*显示排序后的结果*/return 0;}由小到大时:int main(void)int a[10];int i,j,t,k;for ( i = 0; i < 10; i ++ ) scanf("%d",&a[ i ]); /*输入10个数,比武报名,报名费用10000¥ ^_^*/for ( i = 0; i < 9; i ++ )k = i; /*裁判AND记者实时追踪报道比赛情况*/for ( j = i + 1; j < 10; j ++)if ( a[ k ] > a[ j ] ) k = j;if (k!=i)}for( i = 9; i >= 0; i --) printf("%4d",a[ i ]); /*显示排序后的结果*/return 0;}java选择排序法代码 public static void main(String[] args) Random random=new Random();int[] pData=new int[10];for(int i=0;i<pData.length;i++)Integer a =random.nextInt(100);pData[i]= a;System.out.print(pData[i]+" ");}System.out.println();pData=Choose(pData);for(int i=0;i<pData.length;i++)System.out.print(pData[i]+" ");}System.out.println();}public static int[] Choose(int[] pData)System.out.println();for (int i = 0; i < pData.length; i++) for (int j = i; j < pData.length; j++) if(pData[j]<pData[i])int a=pData[j];pData[j]=pData[i];pData[i]=a;}}}return pData;}

9,简单选择排序算法

void main() { int num[6]={1,56,54,34,89,90}; Select_Sort(num,6); }
#include<stdio.h> typedef struct { int key; }datatype; void Select_Sort(datatype R[ ],int n) { int i,k,j; for(i=1;i<n;i++) {k=i; for(j=i+1;j<=n;j++) if(R[j].key<R[k].key)k=j; } if(i!=k) {R[0]=R[k]; R[k]=R[i]; R[i]= R[0]; } } void main() { datatype r[5]={5,8,3,2,9}; Select_Sort(r,5); }
#include<stdio.h> void Select_Sort(datatype R[ ],int n); int main() int test[8]= int i; Select_Sort(test,8); for(i=0;i<8;i++) printf("%3d",test[i]); } return 0; } void Select_Sort(datatype R[ ],int n)   for(i=1;i<n;i++)    k=i;    for(j=i+1;j<=n;j++)    if(R[j].key<r[k].key) k=j;    if(i!=k)    R[0]=R[k];    R[k]=R[i];    R[i]= R[0];    } } } }
你给的算法出错了,我帮你改了,程序如下: #include <stdio.h> typedef struct
public static void main(String[] arg) }

10,简单选择排序

程序分析不能这样断章取义! 判断(i!=k)是因为在前面的程序代码中,有进行比较的内容。这里K用来记录前面比较过程中,比R[i]大(或小)的数的位置。 在每轮比较之初,用 k = i 记录起始数的位置。如果在比较过程中,没有比R[i]大(或小)的数 ,则K的值不变,仍为 i ;如果有,则K的值为大(或小)的数的位置,这时,需要将K位置对应的数与 i 位置对应的数进行交换。
在冒泡排序的基础上稍加了修改,感觉很简单,相关的注释和说明参看我写在你的冒泡排序问题中的内容。程序代码如下,仅供参考:# include "stdio.h"# include "time.h"# include "stdlib.h"# define n 400void init(int a[],int n) int i; srand ( ( unsigned int ) time ( null ) ); for(i=0;i//scanf("%d",&a[i]); a[i]=rand()%100001; } void selectsort(int a[],int n){//最简单的选择排序 int i,j,k=1,m,num,min; for(i=0;i min=i; for(j=i+1;j if(a[min]>a[j]) min=j; num=a[i]; a[i]=a[min]; a[min]=num; printf("("); printf("%c",32); for(m=0;m printf("%d",a[m]); if(m==k-1){ printf("%c",32); printf(")"); printf("%c",32); } else printf("%c%c",32,32); } k++; printf("\n\n"); } } void myprint(int a[],int n){ printf("("); for(int i=0;i printf("%c%c",32,32); printf("%d",a[i]); } printf("%c%c)",32,32); } void main(){ int n; int a[n]; printf("请输入要排序的数组的大小:"); scanf("%d",&n); init(a,n); printf("source:\n"); myprint(a,n); printf("\n\nbubble sort:\n"); selectsort(a,n); printf("\n\nresult:\n"); myprint(a,n); printf("\n\n"); } 呵呵,程序不难,归并的我就不写了,如果你对二路归并思路清晰的话,自己稍微改改就可以了吧!

文章TAG:简单选择排序  c语言选择排序是怎么实现的  思路是什么  
下一篇