當前位置:首頁 » 編程語言 » c語言的選擇法排序

c語言的選擇法排序

發布時間: 2023-11-08 06:15:40

c語言:用選擇排序法對一個數組里的數進行排序,從小到大,要求選出小的進行排序

#include<stdio.h>

intmain()

{

inti=0;

inta[10]={0,5,2,3,6,9,8,7,4,1};

intj=0;

inttmp=0;

intm=sizeof(a)/sizeof(a[0]);//s數組大小

for(i=0;i<m-1;i++)//比較m-1次

{

for(j=0;j<m-i-1;j++)//最後一次比較a[m-i-1]與a[m-i-2]

{

if(a[j]>a[j+1])//如果a[j]比a[j+1]大則交換內容

{

tmp=a[j+1];

a[j+1]=a[j];

a[j]=tmp;

}

}

}

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

{

printf("%d",a[i]);//列印

}

printf(" ");

return0;

}

(1)c語言的選擇法排序擴展閱讀

C語言排序法

把一個數組進行排序可以使用選擇排序法。選擇排序法的原理在是每一趟循環尋找數組中最小的數的下標,然後按照遞增的順序放入數組中。

循環找出最小數的下標,該下標用min保存,直到比較完整個數組,即可找到最小的數,然後將該數放入數組的第一位,這樣就排好了一個元素。

需要再嵌套一層外層循環即可排好所有元素。第二次循環就不用再比較第一個元素了,因為第一個元素已經排好,依次類推,每一次循環就會排好一個,進行n-1次循環即可排好所有元素。

❷ c語言,用選擇法對10個數排序,按正負數分開輸出

選擇排序:大循環i依次取元素和後面所有元素比較,找出其中最值,和當前i的元素交換。一次大循環交換一次。

程序思路:

一、排序函數:根據傳參,實現降序升序兩種功能。

二、數組輸出:根據傳參,實現正數和負數輸出兩種功能。

下面是代碼:


#include <stdio.h>

void px(int nums[],int len,int t);//排序

void showNums(int nums[],int len,int t);//輸出

int main()

{

int nums[10]={8,7,-1,2,-5,4,9,-3,-6,1};

printf("原數組:8,7,-1,2,-5,4,9,-3,-6,1 ");

printf("升序排列後: ");

px(nums,10,1);

printf("|---正數為:");

showNums(nums,10,1);

printf("|---負數為:");

showNums(nums,10,0);

//--------------------------------

printf("降序排列後: ");

px(nums,10,0);

printf("|---正數為:");

showNums(nums,10,1);

printf("|---負數為:");

showNums(nums,10,0);


}

void showNums(int nums[],int len,int t)//t=1輸出正數,t=0輸出負數

{

int i;

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

if((t && nums[i]>0)||(!t && nums[i]<0))

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

printf(" ");

}

void px(int nums[],int len,int t)//t=1升序,t=0降序

{

int i,j,k,m;

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

{

m=nums[i],k=i;

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

if((t && m>nums[j])||(!t && m<nums[j])) m=nums[j],k=j;

m=nums[i],nums[i]=nums[k],nums[k]=m;

}

}

❸ c語言,使用函數的選擇法排序

voidselectionsort(inta[],intm)
{
inti,j;
intk;
inttmp;

for(i=0;i<m-1;i++)//控制循環次數,n個數需要n-1次循環
{
k=i;
for(j=i+1;j<m;j++)
{
if(a[j]<a[k])
k=j;
}
//i不等於k是就證明a[i]不是最小的,
//i等於k時證明a[i]就是本輪比較過程中最小的值
if(i!=k)
{
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
}

❹ C語言編程:選擇法排序

選擇排序是一種簡單直觀的排序演算法


工作原理:

每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。


性能:

選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第一個[5]與[3]交換,導致第一個5挪動到第二個5後面)。

選擇排序的時間復雜度是O(n^2)


思想:

n個記錄的文件的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:

①初始狀態:無序區為R[1..n],有序區為空。

②第1趟排序

在無序區R[1..n]中選出關鍵字最小的記錄R[k],將它與無序區的第1個記錄R[1]交換,使R[1..1]和R[2..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。

……

③第i趟排序

第i趟排序開始時,當前有序區和無序區分別為R[1..i-1]和R(i..n)。該趟排序從當前無序區中選出關鍵字最小的記錄 R[k],將它與無序區的第1個記錄R交換,使R[1..i]和R分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。


C語言版代碼:

#include<stdio.h>
#include<math.h>

#defineMAX_SIZE101
#defineSWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))

voidsort(int[],int);/*selectionsort*/

intmain()
{
inti,n;
intlist[MAX_SIZE];
printf(":");
scanf_s("%d",&n);
if(n<1||n>MAX_SIZE){
fprintf(stderr,"Impropervalueofn ");
exit(1);
}
for(i=0;i<n;i++){/*randomlygeneratenumbers*/
list[i]=rand()*1000;
printf("%d",list[i]);
}
sort(list,n);
printf(" Sortedarray: ");
for(i=0;i<n;i++)/*printoutsortednumbers*/
printf("%d",list[i]);
printf(" ");
return0;
}
voidsort(intlist[],intn)
{
inti,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語言編程:用選擇法對10個整數排序,10個整數用scanf函數輸入

1、打開visual C++ 6.0,准備一個空白的c語言文件,引入頭文件,在main函數中定義變數和數組:

❻ c語言數組排序中的選擇法是什麼意思啊

選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的數據元素中 選出 最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。所以這種排序的方法叫選擇法排序。

C語言參考實例:

#include<stdio.h>
voidmain()
{
inta[]={1,3,4,2,0};
inti,j,n=5;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)//每一遍都與當前a[i]比較
if(a[i]<a[j])//大的前移
{
intt=a[i];
a[i]=a[j];
a[j]=t;
}

for(i=0;i<n;i++)
printf("%d",a[i]);
}

❼ C語言中的選擇排序法是什麼

選擇排序(Selection sort)是一種簡單直觀的排序演算法。工作原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。

以下是一個實現選擇排序的例子:

#defineSWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))
//將list中的n個數據,通過選擇排序演算法排序。
voidselete_sort(intlist[],intn)
{
inti,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);//交換最小元素到當前起始位置。
}
}
熱點內容
什麼是密碼屏蔽 發布:2025-01-31 11:05:13 瀏覽:216
一個演算法的效率可分為 發布:2025-01-31 11:05:12 瀏覽:639
win7用戶名密碼是什麼 發布:2025-01-31 10:57:38 瀏覽:394
網址埠訪問 發布:2025-01-31 10:49:30 瀏覽:512
javaweb代碼 發布:2025-01-31 10:37:54 瀏覽:259
sqlserver合並 發布:2025-01-31 10:22:27 瀏覽:712
大理伺服器地址 發布:2025-01-31 10:10:52 瀏覽:972
流上傳文件 發布:2025-01-31 10:09:27 瀏覽:40
滿贈演算法 發布:2025-01-31 09:54:27 瀏覽:709
濱州視頻拍攝腳本 發布:2025-01-31 09:48:25 瀏覽:418