当前位置:首页 » 编程语言 » c语言选择排序
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言选择排序

发布时间: 2022-02-05 06:01:07

c语言选择排序法

外面的for循环,依次从队列中取出一个数用来比较
里面的for循环,用来比较上面选择的数据与后面的每个数据。

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

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

简单选择排序的示例:

❸ c语言中 顺序表的选择排序是什么

选择排序(Selection sort)是一种简单直观的排序算法。工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
以下是一个实现选择排序的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13

#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
//将list中的n个数据,通过选择排序算法排序。
void selete_sort(int list[], int n)
{
int i, j, min, temp;
for (i = 0; i < n - 1; i++){
min = i;
for (j = i + 1; j < n; j++)//找出最小元素的下标。
if (list[j] < list[min])
min = j;
SWAP(list[i], list[min], temp);//交换最小元素到当前起始位置。

❹ C语言数组选择排序法,超简单,求解

for语句有4个部分内容for ( A;B;C ) D;其中A是初始化语句,每个for只执行A一次,B是循环条件,每次循环前执行判断,如果不满足则结束循环,D是在满足循环条件时执行的,可以是一句或多句(多句时用大括号括起来做整体处理),C是在执行D之后进行的后续处理。for语句执行的顺序是:A,B,D,C,B,D,C,B,D,C,...,B结束

for(i=0;i<9;i++){
iTemp=a[i];iPos=i;
for(j=i+1;j<10;j++){
if(a[j]<iTemp){iTemp=a[j];iPos=i;}
}
a[iPos]=a[i];a[i]=iTemp;
}

假设数组a中输入了十个数为:1,2,5,4,6,8,7,9,10,3,通过手动单步执行程序(把自己当成计算机),分析理解for语句的含义。

i=0;[i=0],i<9成立,开始循环
iTemp=a[i];[iTemp=a[0]=1],iPos=i;[iPos=0]
j=i+1;[j=0+1=1],j<10成立,开始循环:a[j]<iTemp不成立[a[j]=a[1]=2,2<1不成立],跳过不执行
j++;[j=2],j<10成立,继续循环:a[j]<iTemp不成立[5<1],跳过不执行
j++;[j=3],j<10成立,继续循环:a[j]<iTemp不成立[4<1],跳过不执行
j++;[j=4],j<10成立,继续循环:a[j]<iTemp不成立[6<1],跳过不执行
...//没有条件满足让if语句条件能得到执行,因为a[1]~a[9]都不小于iTemp
j++;[j=10],j<10不成立,结束循环
a[0]=a[0];a[0]=1;实际上a[0]值未变,通过以上处理a[0]保存a[0]之后所有数组中最小值
i++;[i=1],i<9成立,继续循环
iTemp=a[i];[iTemp=a[1]=2],iPos=i;[iPos=1]
j=i+1;[j=2],j<10成立,开始循环:a[j]<iTemp不成立[5<2],跳过不执行
j++;[j=3],j<10成立,继续循环:a[j]<iTemp不成立[4<2],跳过不执行
...//没有条件满足让if语句条件能得到执行,因为a[2]~a[9]都不小于iTemp
j++;[j=10],j<10不成立,结束循环
a[1]=a[1];a[1]=2;实际上a[1]值未变,通过以上处理a[1]保存a[1]之后所有数组中最小值
i++;[i=2],i<9成立,继续循环
iTemp=a[i];[iTemp=a[2]=5],iPos=i;[iPos=2]
j=i+1;[j=3],j<10成立,开始循环:a[j]<iTemp成立,iTemp=a[j];[iTemp=4],iPos=j;[iPos=3]
j++;[j=4],j<10成立,继续循环:a[j]<iTemp不成立[6<4],跳过不执行
...
j++;[j=9],j<10成立,继续循环:a[j]<iTemp成立,,iTemp=a[j];[iTemp=3],iPos=j;[iPos=9]
j++;[j=10],j<10不成立,结束循环
a[9]=a[2];a[2]=3;通过以上处理a[2]与a[2]之后所有数组中最小值的a[9]值互换
现在数组变成:1,2,3,4,6,8,7,9,10,5
...//每次i循环都会导致当前a[i]与之后最小值的元素互换值,结果是a[i]保存之后最小值
i++;[i=9],i<9不成立,结束循环
至此数组按照从小到大顺序排序

上述循环中,i值指定当前要处理的元素,j值负责每次提供之后所有元素下标,在进行比较后,当前i指向元素会与之后最小值进行交换,保证当前元素是之后元素中最小的,从而进行9次这样的处理后数组按顺序已经排好序了。

❺ c语言选择排序法

输出中的
for(i=0;i<10;i++)
应该改为
for(i=0;i<5;i++)
为了好看
printf("%d",a[i])
改为
printf("%d ",a[i])

❻ C语言使用指针实现选择法排序。

#include<stdio.h>

voidprint_result(float*,int);

voidSelect_Sort(float*,int);

intmain()

inti;

floatarray[10];

float*pointer;

printf("请输入10个数:\n");

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

scanf("%f",&array[i]);

pointer=array;

Select_Sort(pointer,10);

print_result(pointer,10);

return0;

voidprint_result(float*p,intn)

{//输出结果

intk;

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

printf("%g\t",*(p+k));

voidSelect_Sort(float*pt,intn)

{//全用指针的选择排序法

inti,j,k;

floattempnum;

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

k=i;

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

if(*(pt+j)>*(pt+i))

k=j;

tempnum=*(pt+i);

*(pt+i)=*(pt+k);

*(pt+k)=tempnum;

(6)c语言选择排序扩展阅读:

其它方法:

voidSelectSort(intarr[],intn)

printf("\n选择排序法过程:\n");

inti,j,k,l,t;

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

k=i;

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

if(arr[j]<arr[k])

k=j;

if(k!=i)

t=arr[i];arr[i]=arr[k];arr[k]=t;

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

printf("%3c",arr[l]);

printf("\n");

❼ 有关c语言选择排序的问题。

#include <stdio.h>
int main()
{
int a[10];
int i,j,k,t;
for(i=0;i<=9;i++) {scanf("%d",&a[i]);}

for(j=0;j<10;j++)
{
k=j;
for(i=j+1;i<10;i++) if(a[k]>a[i]) k=i;
t=a[k]; a[k]=a[j]; a[j]=t;
}
for(i=0;i<=9;i++)
{printf("%d ",a[i]);}
return 0;
}
j就是大循环,循环结束排序就完成。
i是小循环,这个循环用来查找 未排序的数据中的最小的数据位置,
找到后,和当前位置交换数据。

❽ C语言选择排序法

人家的效率高,交换次数少。比如3、2、1三个数。
你是第一轮3和2换变成2、3、1,再2和1换,变成1、3、2,第二轮3和2换变成1、2、3
他的是第一轮从后面选一个比3小的最小的数,K保存这个数的下标,先k是1,再k是2,一轮循环玩了才3和1交换,变成1、2、3,第二轮不交换。
你的算法没轮交换次数不定,看数据,他的每轮最多交换一次,特别是数据多时用他的效率高很多,因为给K赋值比交换快很多

❾ C语言选择法排序

#include<stdio.h>

#defineM 5

void main()

{

int b[M],i,j,t,k;

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

scanf("%d",&b[i]);

for(i=0;i<M-1;i++)

{

for(k=i,j=i+1;j<M;j++)

if(b[k]<b[j])

k=j;

if(i!=k)

{

t=b[i];

b[i]=b[k];

b[k]=t;

}

}

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

printf("%d ",b[i]);

}

错在大括号位置加错了。

代码:

#include<stdio.h>

void SelectionSort(int *num,int n)

{

int i = 0;

int min = 0;

int j = 0;

int tmp = 0;

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

{

min = i;//每次讲min置成无序组起始位置元素下标

for(j = i;j < n;j++)//遍历无序组,找到最小元素。

{

if(num[min]>num[j])

{

min = j;

}

}

if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置

{

tmp = num[min];

num[min] = num[i];

num[i] = tmp;

}

}

}

(此处空一行)

int main()

{

int num[6] = {5,4,3,2,9,1};

int i = 0;

SelectionSort(num,6);//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。

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

{

printf("%d ",num[i]);

}

return 0;

}

❿ c语言——选择排序

递归版
#include<stdlib.h>
#include<stdio.h>
#define arrSize 1000
void RecurSelectSort(int a[], int n, int i);

main()
{
int a[arrSize], i, n;

printf("Please input the number of integers:"); /* 打印提示信息 */
scanf("%d", &n); /* 读取字符串长度 */
printf("Please input the integers:"); /* 打印提示信息 */
/* 读取数组元素 */
for(i=0;i<n;i=i+1){
scanf("%d", &a[i]);
}
/* 进行升序函数调用 */
for(i=0;i<n;i=i+1){
RecurSelectSort(a, n, i);
}
/* 打印数组元素 */
for(i=0;i<n;i=i+1){
printf("%d ", a[i]);
}
printf("\n"); /* 换行 */

system("pause");
}

void RecurSelectSort(int a[], int n, int i)
{
int b, max;

if(n==1){
if(a[n-1]>a[n]){
max=a[n-1];
a[n-1]=a[n];
a[n]=max;
}
}
else{
if(a[n-2]>a[n-1] && n>2){
b=a[n-1];
a[n-1]=a[n-2];
a[n-2]=b;
}
RecurSelectSort(a, n-1, i);
i=0;
}
}