您的位置 首页 知识

选择排序法流程图(选择排序和冒泡排序有什么区别)

c语言怎样通过函数调用实现选择排序法?

c语言通过函数调用实现选择排序法:

1、写一个简单选择排序法的函数名,包含参数。int SelectSort(int * ListData,int ListLength);

2、写两个循环,在循环中应用简单选择插入排序:

int SelectSort(int * ListData,int ListLength)

{

int i , j ;

int length = ListLength;

for(i=0;i<=length-2;i++)

{

int k = i;

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

{

if(ListData[k]>ListData[j])

{

k=j;

}

}

if(k!=i)

{

int tmp = ListData[i];

ListData[i] = ListData[k];

ListData[k] = tmp;

}

}

return 0;

}

3、对编好的程序进行测试,得出测试结果:

int main()

{

int TestData[5] = {34,15,6,89,67};

int i = 0;

printf(“排序之前的结果n”);

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

printf(“|%d|”,TestData[i]);

int retData = SelectSort(TestData,5);

printf(“排序之后的结果:n”);

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

printf(“|%d|”,TestData[i]);

return 0;

}

4、简单选择排序中,需要移动的记录次数比较少,主要的时间消耗在对于数据的比较次数。基本上,在比较的时候,消耗的时间复杂度为:n*n。

简述冒泡排序与选择排序的区别?

区别如下

1.冒泡排序是比较相邻位置的两个数,而选择排序是按顺序比较,找最大值或者最小值;

2.冒泡排序每一轮比较后,位置不对都需要换位置,选择排序每一轮比较都只需要换一次位置;

3.冒泡排序是通过数去找位置,选择排序是给定位置去找数;

VB冒泡排序法和选择排序法的优缺点比较

  • 就是两种排序法的区别和优劣,要详细一点,跪求
  • 是写论文还是程序?

c语言的选择排序法 我在devc++里编的。我现在该怎么修改。

  • #include "stdio.h" void sort(int a[],int n) {int i,j,k,t; for(i=0;in-1;i++) {k=i; for(i=j+1;jn;j++) if(a[j]a[k]) k=j; t=a[k]; a[k]=a[i]; a[i]=t; } } main() {int a[10],i; printf("please input 10 numbers:n&quo粻钉纲固蕺改告爽梗鲸t;); for(i=0;i10;i++) scanf("%d",&a[i]); printf("the sorted numbers are:n"); sort(int a[10],10); for(i=0;i10;i++) printf("%d ",&a[i]); }最后就说我有错误F:Dev-Cpp源代码选择排序.cppIn function int main():208F:Dev-Cpp源代码选择排序.cpp[Error] expected primary-expression before int
  • sort(int a[10],10);改为 sort( a,10);

直接插入排序、二分法插入排序、希尔排序、直接选择排序、堆排序、交换排序、快速排序英文怎么说?

  • 直接插入排序:Straight Insertion Sortbr二分法插入排序: Bi怠胆糙感孬啡茬拾长浆nary Sortbr希尔排序:Shell Sortbr直接选择排序:Straight Select Sortbr堆排序:Heap Sortbr交换排序:Swap Sortbr快速排序:Quick Sortbr基数排序:Radix Sortbr归并排序:Merge sort

请问为何这个程序实现不了选择法排序?感激不尽!O(∩_∩)O谢谢!

  • #includestdio.hint main(){ int i,a[15],max,j,t,n=15; printf("Please input the numbers :n"); for(i=0;i15;i++) {printf("a[%d]=",i); scanf("%d",&a[i]);} printf("nThe entered numbers:n"); for(i=0;i15;i++) printf("%5d",a[i]); for(i=0;in-1;i++) { max=a[i]; for(j=0;jn;j++) if(a[j]max){t=j;max=a[j];} a[t]=a[i]; a[i]=max; } printf("nThe sorted numbers:n"); for(i=0;i15;i++) printf("%5d",a[i]); return 0;}问题补充: 这个程序没有实现排序,运行的结果是一组没有规律的输出。
  • for(i=0;in-1;i++) { max=a[i];t=i;这是给你加上的for(j=i+1*这里循环初值改了*;jn;j++)if(a[j]max){t=j;max=a[j];} a[t]=a[i]; a[i]=max; }看看这样行不

严蔚敏版本的 数据结构中 的二叉排序树中 删除节点 时 重接 Q的左右子树 的方法为何 有选择语句?

  • 就是这张图片中下面画线的部分,为什么要用一个if else选择呢?
  • 因为有可能该删除的节点下面的左子树没有右子树的情况。如下(其中O是待删除的节点,O 下面有左右子树L、R,但L下面没有右子树,这种情况下,直接把L的左子树,也就是A提上来即可)——————–根—————————————O——-X——————————–L——-R——————A

请大神帮我改一下程序,请问选择法排序本身是不是有bug?

  • #include string.h#include math.h#include stdlib.h#include stdio.hint main (){int i,j[5],m,n,k;char a[10]="awerty";char b[10]="qwretu";char c[10]="qdwiacn";char d[10]="qda";char e[10]="qucw";char *p,*f[5]={a,b,c,d,e};for(i=0;i5;i++){printf("%d:%sn",i+1,*(f+i));}printf("n");for(i=0;i5;i++){j[i]=strlen(*(f+i));}for(i=0;i5;i++)printf("%d",j[i]);printf("n");for(m=0;m4;m++){k=m;for(n=m+1;n5;n++)if(j[m]j[n])k=n;i=j[m];j[m]=j[k];j[k]=i;p=*(f+m);*(f+m)=*(f+k);*(f+k)=p;}for(i=0;i5;i++)printf("%d",j[i]);printf("nn");for(i=0;i5;i++){printf("%d:%sn",i+1,*(f+i));}printf("n");return 0;}问题补充:
  • *1:awerty2:qwretu3:qdwiacn4:qda5:qucw6 6 7 3 41:aertwy2:eqrtuw3:acdinqw4:adq5:cquwPress any key to continue*#include string.h#include math.h#include stdlib.h#include stdio.hint main () {int i,j[5],m,n,k;char a[10] = "awerty";char b[10] = "qwretu";char c[10] = "qdwiacn";char d[10] = "qda";char e[10] = "qucw";char ch,*f[5] = {a,b,c,d,e};for(i = 0;i 5;i++) {printf("%d:%sn",i + 1,*(f + i));}printf("n");for(i = 0;i 5;i++) {j[i] = strlen(*(f + i));}for(i = 0;i 5;i++)printf("%d ",j[i]);printf("n");for(i = 0; i 5; ++i) { 对5个数组都进行排序for(m = 0;m j[i] – 1;m++) {k = m;for(n = m + 1;n j[i];n++)if(f[i][k] f[i][n]) k = n;if(k != m) {ch = f[i][k];f[i][k] = f[i][m];f[i][m] = ch;}}}for(i = 0;i 5;i++) printf("%d ",j[i]);printf("nn");for(i = 0;i 5;i++) {printf("%d:%sn",i + 1,*(f + i));}printf("n");return 0;}

菜鸟求救,c语言求解???选择法从小到大排序

  • #include iostreamusing namespace std;int main(){int a[10];int i;void sort(int a[],int n);cout"input 10 numbers:";for(i=0;i10;i++)cina[10];sort(a,10);for(i=0;i10;i++)couta[i] ;coutendl;return 0;}void sort(int a[],int n){int i,j,c;for(i=0;in-1;i++)for(j=i+1;jn;j++){if(a[i]a[j])c=a[i]; a[i]=a[j];a[j]=c;}}
  • 你这个是要用C语言的语法来?

c语言的一个和选择排序法有关的问题

  • 选择排序法为什么不能直接简化为下面这段程序?for(i=0;in-1,i++){for(j=i+1;jn;j++)if(b[i]b[j]){t=b[i];b[i]=b[j];b[j]=t;}
  • 你这个根本就不是选择排序,而是冒泡排序!

C语言选择排序法 问题

  • #include "Stdio.h"void main(){ void sa(int array[],int n); int array[10],i; printf("enter the array:n"); for(i=0;i10;i++) scanf("%d",&array[i]); sa(array,10); printf("the sorted array:n"); for(i=0;i10;i++) printf("%dt",array[i]); getch();}void sa(int array[],int n){ int i,j,k,temp; for(i=0;i10;i++) { k=i; for(j=i+1;jn;j++) if(array[j]array[k]) k=j; temp=array[k]; array[k]=array[i]; array[i]=temp; }}以下是我的理解逻辑不知道错在哪里?是变量k的值理解错了吗?请高手详细通俗指点迷津假如array[0]=35,array[1]=8,array[2]=9,array[3]=2,array[4]=-5,array[5]=-1,array[6]=10,array[7]=6,array[8]=62,array[9]=30第一轮比较即执行第一个for循环i=0时第二个for循环的第一次循环情况是此时j=1,k=i=0即if(array[1]array[0])即835 即真则执行k=j;此时k=1,i=0(第一个for循环i=0时)接着交换数组元素即array[0]=8,array[1]=35第二个for循环的第二次循环情况是此时j=2,k=1(没有跳出第二个for循环k的值不会被释放吧?即使释放k的值也不可能为k=i=0?)即if(array[2]array[1])即935 即真则执行k=j;此时k=2,i=0(第一个for循环i=0时)接着交换数组元素即array[0]=9,array[2]=8此时数组元素值已改变即array[0]=9,array[1]=35,array[2]=8,array[3]=2,array[4]=-5,array[5]=-1,array[6]=10,array[7]=6,array[8]=62,array[9]=30 此逻辑推出的结果为:array[0]=-1,array[1]=35,array[2]=8,array[3]=9,array[4]=2,array[5]=-5,array[6]=10,array[7]=6,array[8]=62,array[9]=30array[5]=-5没有排到首位明显出错了
  • if(array[j]array[k])k=j; if(k!=j) { temp=array[k]; array[k]=array[i]; array[i]=temp; }个中滋味自己体会

C语言的选择排序法应该怎么用?

  • 编一个把三个数排序的程序,要求用数组的形式和选择排序法,谢谢
  • void main(){int a[3]={5,3,4};int k=0,s=0,pos=0,temp=0;for(k=0;k2;k++){ pos=k; for(s=k+1;s3;s++) { if(a[pos]a[s]) { pos=s; } } if(pos!=k) { temp=a[k]; a[k]=a[pos]; a[pos]=temp; } }}