當前位置:首頁 » 操作系統 » 演算法排列

演算法排列

發布時間: 2022-01-16 06:04:25

Ⅰ 排列演算法

你的問題問的不清楚

Ⅱ 演算法排序—冒泡排序

cout<<int_array[i]<<endl;相當於printf("%d /n",int_array[i]);
cout<<endl;就是輸出一個換行符。

Ⅲ 求一個排列組合的演算法

有個c++ stl函數叫做next_permutation。。。

#include<algorithm>
usingnamespacestd;

constintmaxn=20;

intA[maxn];
intmain(){
intn;scanf("%d",&n);

for(inti=0;i<n;++i)A[i]=i+1;

intsum=1;for(inti=1;i<=n;++i)sum*=i;

for(intj=0;j<sum;++j){
next_permutation(A,A+n);
for(inti=0;i<n;++i)printf("%d",A[i]);putchar(' ');
}

return0;
}

這個是輸入n,輸出n的全排列。。

有問題可問。。

Ⅳ 排序演算法有多少種

排序(Sorting) 是計算機程序設計中的一種重要操作,它的功能是將一個數據元素(或記錄)的任意序列,重新排列成一個關鍵字有序的序列。
排序就是把集合中的元素按照一定的次序排序在一起。一般來說有升序排列和降序排列2種排序,在演算法中有8中基本排序:
(1)冒泡排序;
(2)選擇排序;
(3)插入排序;
(4)希爾排序;
(5)歸並排序;
(6)快速排序;
(7)基數排序;
(8)堆排序;
(9)計數排序;
(10)桶排序。
插入排序
插入排序演算法是基於某序列已經有序排列的情況下,通過一次插入一個元素的方式按照原有排序方式增加元素。這種比較是從該有序序列的最末端開始執行,即要插入序列中的元素最先和有序序列中最大的元素比較,若其大於該最大元素,則可直接插入最大元素的後面即可,否則再向前一位比較查找直至找到應該插入的位置為止。插入排序的基本思想是,每次將1個待排序的記錄按其關鍵字大小插入到前面已經排好序的子序列中,尋找最適當的位置,直至全部記錄插入完畢。執行過程中,若遇到和插入元素相等的位置,則將要插人的元素放在該相等元素的後面,因此插入該元素後並未改變原序列的前後順序。我們認為插入排序也是一種穩定的排序方法。插入排序分直接插入排序、折半插入排序和希爾排序3類。
冒泡排序
冒泡排序演算法是把較小的元素往前調或者把較大的元素往後調。這種方法主要是通過對相鄰兩個元素進行大小的比較,根據比較結果和演算法規則對該二元素的位置進行交換,這樣逐個依次進行比較和交換,就能達到排序目的。冒泡排序的基本思想是,首先將第1個和第2個記錄的關鍵字比較大小,如果是逆序的,就將這兩個記錄進行交換,再對第2個和第3個記錄的關鍵字進行比較,依次類推,重復進行上述計算,直至完成第(n一1)個和第n個記錄的關鍵字之間的比較,此後,再按照上述過程進行第2次、第3次排序,直至整個序列有序為止。排序過程中要特別注意的是,當相鄰兩個元素大小一致時,這一步操作就不需要交換位置,因此也說明冒泡排序是一種嚴格的穩定排序演算法,它不改變序列中相同元素之間的相對位置關系。
選擇排序
選擇排序演算法的基本思路是為每一個位置選擇當前最小的元素。選擇排序的基本思想是,基於直接選擇排序和堆排序這兩種基本的簡單排序方法。首先從第1個位置開始對全部元素進行選擇,選出全部元素中最小的給該位置,再對第2個位置進行選擇,在剩餘元素中選擇最小的給該位置即可;以此類推,重復進行「最小元素」的選擇,直至完成第(n-1)個位置的元素選擇,則第n個位置就只剩唯一的最大元素,此時不需再進行選擇。使用這種排序時,要注意其中一個不同於冒泡法的細節。舉例說明:序列58539.我們知道第一遍選擇第1個元素「5」會和元素「3」交換,那麼原序列中的兩個相同元素「5」之間的前後相對順序就發生了改變。因此,我們說選擇排序不是穩定的排序演算法,它在計算過程中會破壞穩定性。
快速排序
快速排序的基本思想是:通過一趟排序演算法把所需要排序的序列的元素分割成兩大塊,其中,一部分的元素都要小於或等於另外一部分的序列元素,然後仍根據該種方法對劃分後的這兩塊序列的元素分別再次實行快速排序演算法,排序實現的整個過程可以是遞歸的來進行調用,最終能夠實現將所需排序的無序序列元素變為一個有序的序列。
歸並排序
歸並排序演算法就是把序列遞歸劃分成為一個個短序列,以其中只有1個元素的直接序列或者只有2個元素的序列作為短序列的遞歸出口,再將全部有序的短序列按照一定的規則進行排序為長序列。歸並排序融合了分治策略,即將含有n個記錄的初始序列中的每個記錄均視為長度為1的子序列,再將這n個子序列兩兩合並得到n/2個長度為2(當凡為奇數時會出現長度為l的情況)的有序子序列;將上述步驟重復操作,直至得到1個長度為n的有序長序列。需要注意的是,在進行元素比較和交換時,若兩個元素大小相等則不必刻意交換位置,因此該演算法不會破壞序列的穩定性,即歸並排序也是穩定的排序演算法。

Ⅳ 排列組合公式演算法是什麼

排列組合是組合學最基本的概念公式,從n個中取m個排一下,有n(n-1)(n-2)…(n-m+1)種,即n/(n-m)。排列組合計算公式從n個不同元素中取出m(m≤n)個元素的所有排列的個數。

從n個不同元素中,任取m(m≤n)個元素並成一組,叫做從n個不同元素中取出m個元素的一個組合;從n個不同元素中取出m(m≤n)個元素的所有組合的個數,叫做從n個不同元素中取出m個元素的組合數。用符號 C(n,m) 表示。

根據組合學研究與發展的現狀,它可以分為如下五個分支:經典組合學、組合設計、組合序、圖與超圖和組合多面形與最優化。

由於組合學所涉及的范圍觸及到幾乎所有數學分支,也許和數學本身一樣不大可能建立一種統一的理論。然而,如何在上述的五個分支的基礎上建立一些統一的理論,或者從組合學中獨立出來形成數學的一些新分支將是對21世紀數學家們提出的一個新的挑戰。

Ⅵ 排列組合 演算法實現

這是我剛剛寫的,我寫程序是用Turbo C 寫的,本人討厭那些華而不實的國產編輯器,VC用起來麻煩。所以沒有中文注釋,也汪喜歡用中文注釋。抱歉!
#include "stdio.h"
#include "string.h"
#define n0 10
char letter[n0+1];
void getdata()
{
printf("please the dic's letter\n");
scanf("%s",letter);
}
void printdata()
{
int i;
printf("the dic's letter is\n");
for(i=0;i<strlen(letter);i++)
printf("%c",letter[i]);
printf("\n");
}
void move(char ch[],char intoch,int i)
{
int len=strlen(ch);
int j;
for(j=len;j>i;j--)
ch[j]=ch[j-1];
ch[i]=intoch;
}
void creatdic()
{
char temp[n0+1],outch[n0+1],ch;
int i,j,number;
FILE *in,*out;
temp[0]=letter[0];
temp[1]='\0';
if((in=fopen("D:\\dic.txt","at"))==NULL)
{ printf("infile error!");
exit(0);
}
else
fprintf(in,"%s\n",temp);
if((out=fopen("D:\\dic.txt","rt"))==NULL)
{ printf("outfile error!");
exit(0);
}
else
{
for(i=1;i<=strlen(letter);i++)
{
ch=letter[i];
rewind(out);
while(out)
{ fscanf(out,"%s\n",temp);
number=strlen(temp);
for(j=0;j<number;j++)
outch[j]=temp[j];
outch[j]='\0';
for(j=0;j<=number;j++)
{
move(outch,ch,j);
fprintf(in,"%s\n",outch);
}
}
}

}
}
void main()
{
getdata();
printdata();
creatdic();
getch();
}

程序是從N個字元中得到所有的排列,
比如:123
那就可以得到:
1
2
21
12
3
31
13
32
23
321
231
213
312
132
123

Ⅶ 在各類演算法中那種演算法排序是最快的

說句實話,沒有最快這一說。

  1. 如果不在乎浪費空間,應該是桶排序最快

  2. 如果整體基本有序,插入排序最快

  3. 如果考慮綜合情況,快速排序更加實用常見(希爾排序、堆排序等各種排序也各有優劣)

  4. 一般情況下,冒泡這種排序僅僅是名字起的有趣罷了,不太好用

Ⅷ 演算法問題,排列組合,高手進

不需要用數組的,直接用3個變數就可以,很簡單的!

#include<stdio.h>
void main()
{
int i,j,k;

for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
for(k=1;k<=3;k++)
{
printf("%d %d %d\n",i,j,k);
}
}

熱點內容
sql資料庫試題 發布:2022-05-21 09:28:44 瀏覽:924
光遇安卓王子季入口怎麼卡進去 發布:2022-05-21 09:27:19 瀏覽:415
java編寫的軟體 發布:2022-05-21 09:27:08 瀏覽:119
壓縮除以8 發布:2022-05-21 09:25:21 瀏覽:10
韶關學編程 發布:2022-05-21 09:23:46 瀏覽:191
wms為什麼要伺服器 發布:2022-05-21 09:22:41 瀏覽:775
linux7z 發布:2022-05-21 09:22:29 瀏覽:334
唐篩演算法 發布:2022-05-21 09:22:22 瀏覽:643
翼支付密碼怎麼設置 發布:2022-05-21 09:21:08 瀏覽:507
體重和身高的健康演算法 發布:2022-05-21 09:20:50 瀏覽:784