❶ 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;
}
}