c語言選擇排序法詳解 c語言編程:隨機(jī)輸入五個(gè)整數(shù),利用選擇排序法對輸入的數(shù)進(jìn)行從小到大排序?
c語言編程:隨機(jī)輸入五個(gè)整數(shù),利用選擇排序法對輸入的數(shù)進(jìn)行從小到大排序?你的程序邏輯有些問題,輸入,排序,輸出分開做,這樣更明確,更清晰,代碼如下:#include <stdio.h>#inc
c語言編程:隨機(jī)輸入五個(gè)整數(shù),利用選擇排序法對輸入的數(shù)進(jìn)行從小到大排序?
你的程序邏輯有些問題,輸入,排序,輸出分開做,這樣更明確,更清晰,代碼如下:#include <stdio.h>#include <stdlib.h>int main(){int a[5]int i, j, tint min// 輸入printf("input 5 numbers:n")for (i = 0 i<5 i )scanf("%d", &a[i])// 選擇排序for (i = 0 i < 5 i ) {for (j = i 1 j < 5 j ) {if (a[j] < a[i]) {t = a[i] a[i] = a[j] a[j] = t}}}// 輸出printf("the sorrted numbers:n")for (i = 0 i < 5 i ) {printf("%d ", a[i])}printf("n")system("pause")return 0}運(yùn)行結(jié)果:
快速排序法c語言?
快速排序是基于分治技術(shù)的重要排序算法,排序算法按照元素的值對它們進(jìn)行劃分。
劃分是對給定數(shù)組中的元素的重新排序,使得A [ s ] A[s]A[s]左邊的元素都小于等于A [ s ] A[s]A[s],而右邊A [ s ] A[s]A[s]右邊的元素都大于等于A [ s ] A[s]A[s]。
顯然,建立了一個(gè)劃分以后,A [ s ] A[s]A[s]已經(jīng)位于它在有序數(shù)組中的最終結(jié)果,接下來我們可以繼續(xù)對A [ s ] A[s]A[s]前和A [ s ]A[s]A[s]后的子數(shù)組分別進(jìn)行排序(例如,使用同樣的方法)。
注意,它和合并排序不同之處在:
在合并排序算法中,將問題劃分為兩個(gè)子問題,是很快的,算法的主要工作在于合并子問題的解;
在快速排序中,算法的主要工作在于劃分階段,而不需要再去合并子問題的解了。
C語言:用選擇排序法對一個(gè)數(shù)組里的數(shù)進(jìn)行排序,從小到大,要求選出小的進(jìn)行排序?
C語言:用選擇排序法對一個(gè)數(shù)組里的數(shù)進(jìn)行排序,從小到大,要求選出小的進(jìn)行排序
代碼如下,如果運(yùn)行錯(cuò)誤,支持反駁。
#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數(shù)組大小
for(i=0i<m-1i )//比較m-1次
{
for(j=0j<m-i-1j )//最后一次比較a[m-i-1]與a[m-i-2]
{
if(a[j]>a[j 1])//如果a[j]比a[j 1]大則交換內(nèi)容
{
tmp=a[j 1]
a[j 1]=a[j]
a[j]=tmp
}
}
}
for(i=0i<mi )
{
printf("%d",a[i])//打印
}
printf("n")
return0
}
C語言怎樣對二維數(shù)組中每個(gè)元素進(jìn)行選擇排序?
參考代碼:
#include <stdio.h>
#include "stdlib.h"
#include "time.h"
int main(int argc,char *argv[]){
int a[5][8],i,j,k,t,*p
printf("排序前:n")
srand((unsigned)time(NULL))
for(i=0i<5i ){//為二維數(shù)組賦值
for(j=0j<8printf("=",a[i][j ]=rand()0))
printf("n")
}
printf("排序后:n")
p=(int *)a//降為一維,這樣排序簡單
for(t=i=0i<40i ){//選擇法排序
for(k=i,j=k 1j<40j )
if(p[k]>p[j])
k=j
if(k!=i)
j=p[k],p[k]=p[i],p[i]=j
printf( t%8 ? "=" : "=n",p[i])
}
return 0
}
C語言中冒泡排序法和選擇法的不同是什么本質(zhì)區(qū)別是什么?
是這樣的 區(qū)別主要在交換的方式上 每一輪都把最大或最小的元素篩選出來放在相應(yīng)的位置上 這是相同的 但是 對于每一輪 比如第一輪 要把1~n中最大的那個(gè)放到n這個(gè)位置 冒泡法每次比較和移動(dòng)相鄰的兩項(xiàng) 而選擇排序每次交換當(dāng)前項(xiàng)和第n項(xiàng) 我把代碼寫出來你就懂了: 冒泡: fori:=1ton-1do if(a[i]>a[i 1])thenswap(i,i 1) 選擇: fori:=1ton-1do if(a[i]>a[n])thenswap(i,n) (swap表示交換) 總的來說,兩種排序比較的次數(shù)是相同的 但交換的次數(shù),選擇排序是更少的 雖然兩者的時(shí)間復(fù)雜度都是O(n^2) 但通常,選擇排序更快一點(diǎn)