㈠ 輸入5個數,用冒泡排序的演算法將其排序,降序輸出具體程序,謝謝
#include<stdio.h>
void main()
{
int a[5];
int i,j,m;
printf("please input five numbers:\n);
for(i=0;i<兄宴5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
{
for(j=0;j<衡衫5-i;j++)
{
if(a[j]>咐塵腔a[j+1])
{
m=a[j+1];
a[j+1]=a[j];
a[j]=m;
}
}
}
}
㈡ 在C語言中,如何輸出一組數的排列組合
#include <stdio.h>
#include <stdlib.h>
int n = 0;
void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf("%d ", list[i]);
printf(" ");
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]);
}
}
}
int main()
{
int k;//輸入自改段然數的個數
printf("請輸入連續自然數的個數:");
scanf("%d",&k);
int *list = (int *)malloc(k);
for (int i = 0; i < k; i ++)
{
list[i] = i + 1;
}
// int list[] = {1, 2, 3, 4, 5};
perm(list, 0, k-1);
printf("total:%d
", n);
return 0;
}
該程序的輸入為一個任意自然數n,將輸出從1到n的全排列。
C語言的基本數的排列法
1、冒泡排序:每次相鄰兩個數比較,若升序,則將大的數放到後面,一次循環過後,就會將最大的數放在最後。
#include <stdio.h>
int main(void)
{
int a[1001];
int n,i,j,t;
scanf("%d",&n);//n為要排序的數的個數
//輸入要排序的數
for(i=0;i<n;++i)
scanf("%d",a+i);
//接下來進行排序
for(i=0;i<n-1;++i)//n個數,總共需要進行n-1次
{ //n-1個數排完,第一個數一定已經歸位
//每次會將最大(升序)或最小(降序)放到最後面
for(j=0;j<n-i-1;++j)
{
if(a[j]>a[j+1])//每次冒泡,進行交換
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(j=0;j<n;++j)
printf("%-5d ",a[j]);
printf(" ");
}
return 0;
}
2、選擇排序:從第一個數開始,每次和後面剩餘的數進行比較,若升序,則如果後邊的數比當前數字小,進行交換,和後面的所有的數比較、交換後,就會將當前的最小值放在當前的位置。
#include <stdio.h>
int main(void)
{
int a[1001];
int n,i,j,t;
scanf("%d",&n);//n為要排序的數的個數
//輸入需要排序的數
for(i=0;i<n;++i)
scanf("%d",a+i);
//接下來進行排序
for(i=0;i<n-1;++i)//因為每碰茄次需要和a[i]後面的數進行比較,所以到a[n-2](倒數第2個元素)就行
{
for(j=i+1;j<n;++j)//j從i後一個開始,a[i]與a[j]進行比較
{
if(a[i]>a[j])//a[i]為當前值,若是比後面的a[j]大,進行交換
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}//每排笑殲察序一次,就會將a[i](包括a[i])之後的最小值放在a[i]的位置
for(j=0;j<n;++j)
printf("%-5d",a[j]);
printf(" ");
}
return 0;
}
㈢ 輸入10個數,用冒泡排序法按由小到大順序排序並輸出c語言的
冒泡排序的程序代碼如下:
#include<stdio.h>
int main()
{
int a[10]={0};
int i=0,j=0,t=0;
for(i=0;i<10;i++)
{scanf("%d",&a[i]);}
for(i=0;i<10;i++)
{for(j=0;j<10-i;j++){
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}}}
for(i=0;i<10;i++)
{printf("%d ",a[i]);}
return 0;}
任意輸入十個數據,程序運行結果:
(3)用冒泡演算法排列組合全部列印擴展閱讀:
冒泡排序演算法的原理如下:
1、比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2、對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3、針對所有的元素重復以上的步驟,除了最後一個。
4、持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
㈣ c語言隨機輸入10個浮點型數據,並排序由高到低,最後將排列在偶數位的數據列印
隨機輸入10個浮告輪點型數據,並排序由高到低,最後將排列在偶數位的數據列印。這是入門級的編程題目。因為數敏賀據量很小,所以可用,最簡單的冒泡排序演算法。排序完成以後,再使用循環把排橋友派列在偶數位的數據列印出來。
㈤ 編寫一個函數模板,使用冒泡排序將數組內容由小到大排列並列印出來,並寫出調用此函
模板函數里的參數是形式參數,就是一個數組,如 (int a[])
㈥ 用java程序冒泡排序演算法把一組打亂順序的數字從小到大排列並列印出來
publicclassMaoPao
{
publicstaticvoidmain(Stringargs[])
{
int[]arr={2,1,3,4,6,5,7,8,9,0,10};
//N是數組的元素個數,這樣無論多少個數,直接修改arr中的元素就行了,
//不需要調整循環次數
intN=arr.length;
inttemp=0;
//冒泡排序:每次把最大的放到最後,N-i是因為第i次排序之後,
//數組arr的最後i個數已經是按照大小順序的了,所以不需要再排序了
//比如第一次排序之後,最後一個數肯定是最大的,下一次只需要排前9個就行了。
for(inti=1;i<N;++i)
{
for(intj=0;j<N-i;++j)
{
//如果前面的數比後面的大,則不是按照順序的,因此要交換
if(arr[j]>arr[j+1])
{
temp=arr[j];//交換2個數
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(inti=0;i<N;++i)//輸出排序後的結果
{
System.out.print(arr[i]+"");
}
}
}
忘採納。
㈦ 用冒泡排序法對數組int【10】進行從大到小排序,並按照從大到小列印出來。(使用printf函數),c語言的
#include<stdio.h>
int a[10];
int main()
{
int i,j,n,t;
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
for (i=1;i<纖前返毀飢n;i++)
for (j=n;j>i;j--)
if (a[j]<a[j-1])
{
t=a[j];a[j]=a[j-1];a[j-1]=t;
}
for (i=1;i<悔瞎=n;i++)
printf("%d ",a[i]);
}
㈧ C語言列印一竄數字的所有組合
1.樓主的數太多了,我的機器有點落伍,顯示的時間有點漫長~~~~,我把數改成了1,2,3,3,4,7,7。顯示上也簡單點,原理是一樣的。。。另外不是很清楚樓主的所有組合是不是包括取出一部分字元串做排列組合,我弄的是所有
數字用上的全排列,就是沒有12,13這樣的組合數,樓主如果是需要顯示這樣的數,只要在主函數中做循環,分別取出1至7個數漏滲顫再運行deal和排列函數就行(注,調試環境是VC++6.0)
#include "stdio.h"
#include "stdlib.h"
#define NUM 30
#define N 7 //數組元素個數
static int cnt=0;//用於記錄重復數字的個數
void print(int n,int arr[]){
int i;
static int count=0;
printf("%d:",++count);
for(i=0;i<n;i++)
printf("%d",arr[i]);
printf("\t");
if(count%5==0)
printf("\n");
}
void arrange(int size,int arr[],int p){
//演算法思想:採用經典回溯法,先喊或確定第一個位置,再對餘下的n-1位數字做全排列
//每組全排列後均把所有參與此次全排列的數與這次全排列的第一個數交換後再重復排列
//返敗例如遞歸到排列1234後回溯一次即排列34,將4與3交換,再回溯至排列234分別將34與2交換後排列
//直至排列完成後,再分別將234與1交換後排列
//不過演算法效率在數字過大後就比較低下了,樓主可以去網上找找更高效的演算法
int i,temp;
if(p+1==size){//排列完成後列印
print(size,arr);
return;
}
for(i=p;i<size;i++){//交換
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
arrange(size,arr,p+1);//遞歸調用排列
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
}
}
void deal(int a[],int b[]){
//將重復數字去掉,方便全排列
int i,j;
for(i=0;i<N;i++){
if(a[i]>0){
for(j=i+1;j<N;j++){
if(a[i]==a[j]){
a[j]=-1;//重復標志
cnt++;
}
}
}
}
j=0;
for(i=0;i<=N;i++){
if(a[i]>0){
b[j++]=a[i];
}
}
}
void main(){
int a[N]={1,2,3,3,4,7,7};
int b[NUM];
deal(a,b);//處理數組
arrange(N-cnt,b,0);//排列輸出
}
2.和第一問一樣,我只選了1,2,3,3,4,7,7。程序上只是列印函數改了下,deal函數做了調整,本來想在第一問的排列基礎上再在特定的位置上插入3和7,後來發現會重復,做了很久的無用功啊。。print中的循環太多了,看起來有點累,不過主要的就是兩個大的東西,兩個循環實際是一樣的原理,樓主有興趣可試著把循環換成一個函數,可讀性會強點。下面的代碼適用性還是很廣的。
#include "stdio.h"
#include "stdlib.h"
#define NUM 30
#define N 7
static int cnt=0;//用於記錄重復數字的個數
static int t[N];//用於記錄重復數字
void print(int n,int arr[]){
//演算法思想:對有重復的數字組合排列,將它看成是對空餘位置填充數字
//先將重復的數字進行填充,即在空餘位置中取定重復數的位置,再對餘下的位置進x行全排列填充
//按此思想得到的個數為 =1260個
int a1[N-2],a2[N];
static int count=0;
for(int i=0;i<N-cnt/2-1;i++){
//取5個數,包括完全沒重復的數再加上重復的數(例如:1,2,4,3,3)
//對這5個數按照演算法思想排列
a1[i]=t[0];
for(int j=i+1;j<=N-cnt/2-1;j++){
a1[j]=t[0];
for(int k=0;k<i;k++)
a1[k]=arr[k];
for(int m=i+1;m<j;m++)
a1[m]=arr[m-1];
for(int p=j+1;p<N-cnt/2;p++)
a1[p]=arr[p-2];
for(int s=0;s<N-1;s++){//將7個數取出按照演算法排列
a2[s]=t[1];
for(int r=s+1;r<=N-1;r++){
a2[r]=t[1];
for(int y=0;y<s;y++)
a2[y]=a1[y];
for(int x=s+1;x<r;x++)
a2[x]=a1[x-1];
for(int h=r+1;h<N;h++)
a2[h]=a1[h-2];
printf("%d:",++count);
for(int c=0;c<N;c++)//將該排列列印出來
printf("%d",a2[c]);
printf("\t");
if(count%5==0)
printf("\n");
}
}
}
}
}
void arrange(int size,int arr[],int p){
int i,temp;
if(p+1==size){//排列完成後列印
print(size,arr);
return;
}
for(i=p;i<size;i++){//交換
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
arrange(size,arr,p+1);//遞歸調用排列
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
}
}
void deal(int a[],int b[]){
//將數組處理成只剩不重復排列的數
int i,j,k=0;
for(i=0;i<N;i++){
if(a[i]>0){
for(j=i+1;j<N;j++){
if(a[i]==a[j]){
t[k++]=a[i];//記錄重復數
a[i]=-1;
a[j]=-1;
cnt+=2;
}
}
}
}
j=0;
for(i=0;i<=N;i++){
if(a[i]>0){
b[j++]=a[i];
}
}
}
void main(){
int a[N]={1,2,3,3,4,7,7};
int b[NUM];
deal(a,b);//處理數組
arrange(N-cnt,b,0);//排列輸出
}
3.第三問比較簡單,在第二問列印程序上加上限制條件(即第三位不能是3,第七位不能是七)
#include "stdio.h"
#include "stdlib.h"
#define NUM 30
#define N 7
static int cnt=0;//用於記錄重復數字的個數
static int t[N];//用於記錄重復數字
void print(int n,int arr[]){
int a1[N-2],a2[N];
static int count=0;
for(int i=0;i<N-cnt/2-1;i++){
a1[i]=t[0];
for(int j=i+1;j<=N-cnt/2-1;j++){
a1[j]=t[0];
for(int k=0;k<i;k++)
a1[k]=arr[k];
for(int m=i+1;m<j;m++)
a1[m]=arr[m-1];
for(int p=j+1;p<N-cnt/2;p++)
a1[p]=arr[p-2];
for(int s=0;s<N-1;s++){
a2[s]=t[1];
for(int r=s+1;r<=N-1;r++){
a2[r]=t[1];
for(int y=0;y<s;y++)
a2[y]=a1[y];
for(int x=s+1;x<r;x++)
a2[x]=a1[x-1];
for(int h=r+1;h<N;h++)
a2[h]=a1[h-2];
if(a2[2]!=t[0]&&a2[6]!=t[1]){
printf("%d:",++count);
for(int c=0;c<N;c++)
printf("%d",a2[c]);
printf("\t");
if(count%5==0)
printf("\n");
}
}
}
}
}
}
void arrange(int size,int arr[],int p){
int i,temp;
if(p+1==size){//排列完成後列印
print(size,arr);
return;
}
for(i=p;i<size;i++){//交換
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
arrange(size,arr,p+1);//遞歸調用排列
temp=arr[p];
arr[p]=arr[i];
arr[i]=temp;
}
}
void deal(int a[],int b[]){
//將數組處理成只剩不重復排列的數
int i,j,k=0;
for(i=0;i<N;i++){
if(a[i]>0){
for(j=i+1;j<N;j++){
if(a[i]==a[j]){
t[k++]=a[i];//記錄重復數
a[i]=-1;
a[j]=-1;
cnt+=2;
}
}
}
}
j=0;
for(i=0;i<=N;i++){
if(a[i]>0){
b[j++]=a[i];
}
}
}
void main(){
int a[N]={1,2,3,3,4,7,7};
int b[NUM];
deal(a,b);//處理數組
arrange(N-cnt,b,0);//排列輸出
}
㈨ c語言中用冒泡排序法排列任意輸入的10個數,用程序輸出從小到大的排列具體過程,謝謝。。
可以試試這樣寫!舉前察悔皮!!
#include<stdio.h>
#define N 10
void main()
{
int i,a[N],t=0,j=0;
for(i=0;i<正茄N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for(i=0;i<N;i++)
printf("%5d",a[i]);
}
㈩ 數組int]arr={4,8,9,10,2,6};+使用冒泡排序,讓arr從小到大排列,並列印
代碼慶衫並譽跡如下:
```
int[] arr = {4, 8, 9, 10, 2, 6};
int temp;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "塌洞 ");
}
```
輸出結果為:2 4 6 8 9 10