當前位置:首頁 » 編程語言 » 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;
}
}