c選擇排序演算法
Ⅰ c語言選擇排序法
外面的for循環,依次從隊列中取出一個數用來比較
裡面的for循環,用來比較上面選擇的數據與後面的每個數據。
Ⅱ 求 c語言選擇排序法和 冒泡排序法代碼!
選擇排序:
void select_sort(int a[],int n) //傳入數組的要排序的元素個數
{int i,j,min,t;
for(i=0;i<n-1;i++)
{ min=i; //min:當前最小值下標
for(j=i+1;j<n;j++) //掃描餘下的部分
if(a[min]>a[j]) //若有其它元素更小,就記錄其下標
min=j;
if(min!=i) //保若最小值不在排序區首位,就換到首位
{t=a[min]; a[min]=a[i]; a[i]=t;}
}
}
冒泡排序:
void bubble_sort(int a[], int n) //傳入數組的要排序的元素個數
{ int i, j, t;
for (j=0; j<n-1; j++) //n個元素比較n-1輪
for (i= 0; i<n-1-j;i++) //比較相信的兩個數
if(a[i]>a[i+1]) //若大小順序不符,就交換
{t=a[i]; a[i]=a[i+1]; a[i+1]=t;
}
Ⅲ C語言關於選擇排序法的演算法問題
首先,你這是冒泡排序不是選擇排序。
書上的演算法沒啥優點,不管時間復雜度還是所佔用得空間都比你寫的大,不建議使用。可能這么寫唯一的優點是邏輯性更強,便於學生理解吧
Ⅳ 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語言選擇排序法
人家的效率高,交換次數少。比如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選擇排序
K=J就是循環復制最小的數給K,這樣無論冒泡多少次都可以實現最小的排在最前面!
Ⅶ C語言選擇排序演算法
voidbubble(inta[],intn)
{
inti,k,temp;
for(k=0;k<n-1;k++)
{
for(i=k+1;i<n;i++)
{
if(a[k]>a[i])
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
for(i=0;i<n;i++)
printf("%d",a[i]);
printf(" ");
}
Ⅷ C語言選擇排序法有哪些
從大到小,從小到大。中心就是這兩種。
Ⅸ 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;
}
(9)c選擇排序演算法擴展閱讀
C語言排序法
把一個數組進行排序可以使用選擇排序法。選擇排序法的原理在是每一趟循環尋找數組中最小的數的下標,然後按照遞增的順序放入數組中。
循環找出最小數的下標,該下標用min保存,直到比較完整個數組,即可找到最小的數,然後將該數放入數組的第一位,這樣就排好了一個元素。
需要再嵌套一層外層循環即可排好所有元素。第二次循環就不用再比較第一個元素了,因為第一個元素已經排好,依次類推,每一次循環就會排好一個,進行n-1次循環即可排好所有元素。
Ⅹ C 冒泡排序和選擇排序
上面的冒泡,下面的是選擇排序
第一層循環可以修改,不過第二層循環也要隨之更改:
for(int i=0;i<Count-1;i++)
{
for(int j=Count-1;j>i;j--)