排序演算法偽代碼
㈠ 求冒泡排序的全中文的偽代碼
偽代碼啊,還真不好描述:
假設有N個數,可以想像成所有的數分成兩部分:上部和下部,上部的是排好序的,下部的沒有。
外層循環N-1次(i從0到N-2){ //每循環一次就能讓一個下部數中最大的冒到上部來
內層循環從0開始,循環到j(j=N-i){ //保證下部的每個位置都進行一次冒泡判斷
如果當前的數比它上面的一個數大,就互換位置(冒上來一次)。
/* 這是互換代碼
if(array[j]>array[j+1])
{
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
*/
//可以想像,如果足夠大,該數會一直更新位置,一直往上冒,到達合適位置。
}
}
外層循環結束後就排好序了。
這個演算法的特點就是如果一個數是下部中最大的,它就能一直往上冒,不管它當初在什麼位置,內層一輪冒泡後它就能冒到上部去(成為上部里最小的)。N-1輪後就排好序了。
描述的不怎麼好,還寫不出來的話可以直接要代碼(猜你是想自己寫出來所以沒貼代碼)
㈡ 用偽代碼寫出使用子演算法的冒泡排序演算法,子演算法是在未排序子表中做冒泡工作
#include 「stdio.h」
#define N 10
main( )
{ int a[N+1];
int i,j,t;
for(i=1;i<=N;i++)
scanf(「%d」,&a[i]);
printf(「\n」);
for(j=1;j<N;j++)
for(i=1;i<N-j;i++)
if(a[i]>a[i+1])
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf(「the sorted numbers:\n」);
for(i=1;i<=N;i++)
printf(「%4d」,a[i]);
}
㈢ 我研究出一種新排序演算法
我欣賞你的演算法!孩子,相信自己,有朝一日你會成功的!不要聽他們對你的評論,她們只是嫉妒你的才華!任何一個思想,都有一個微不足道的開端!
㈣ 區間排序演算法的實現,代碼C++,排序演算法的問題
這不就類似於桶排序么,只不過桶的大小為序列的最大值減去最小值+1而已。
偽代碼如下:
voidbucketsort(int*Input,intlen)
{
intu,w;
u=mininInput;
w=maxinInput;
int*bucket=newint[w-u+1];
for(inti=0;i<w-u+1;i++)
bucket[i]=0;
for(inti=0;i<len;i++)
bucket[Input[i]-u]++;
//printresult;
for(inti=0;i<w-u+1;i++)
while(bucket[i])
{
cout<<bucket[i]+u<<endl;
bucket[i]--;
}
㈤ 幫忙解釋一下這段分治法的偽代碼,或者翻譯成python代碼!
這是將一個數組A中A[p]到A[q]分成數組L,A[q+1]到A[r]分成數組R,然後再按從小到大的順序重新排序合並起來。前提是A[p到q]和A[q+1到r]已經按重小到大順序排好,不然這個函數沒有意義。它是merge sort排序演算法的一部分,先把數組分成兩半,分別排序,在合並起來。比如說數組已經對前半部分和後半部分完成排序[3,2,5,1,6,4]-->[2,3,5,1,4,6]。通過MERGE函數分成[2,3,5]和[1,4,6].然後組合成[1,2,3,4,5,6]
㈥ 編寫偽代碼演算法,讀入用戶輸入的三個整數,然後按照數字排序輸出它們.
以下的偽代碼實現升序排序:
1)讀入變數1,變數2,變數3
2)如果變數1>變數2,則交換變數1、變數2的值
3)如果變數1>變數3,則交換變數1、變數3的值
4)如果變數2>變數3,則交換變數2、變數3的值
5)輸出變數1,變數2,變數3的值
㈦ 想問您一些排序演算法的偽代碼,謝啦
冒泡排序:網頁鏈接
所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量數據的處理方面。一個優秀的演算法可以節省大量的資源。在各個領域中考慮到數據的各種限制和規范,要得到一個符合實際的優秀演算法,得經過大量的推理和分析。
C++自帶的algorithm庫函數中提供了排序演算法。
穩定的
冒泡排序(bubble sort) — O(n^2)
雞尾酒排序(Cocktail sort,雙向的冒泡排序) — O(n^2)
插入排序(insertion sort)— O(n^2)
桶排序(bucket sort)— O(n); 需要 O(k) 額外空間
計數排序(counting sort) — O(n+k); 需要 O(n+k) 額外空間
合並排序(merge sort)— O(nlogn); 需要 O(n) 額外空間
原地合並排序— O(n^2)
二叉排序樹排序 (Binary tree sort) — O(nlogn)期望時間; O(n^2)最壞時間; 需要 O(n) 額外空間
鴿巢排序(Pigeonhole sort) — O(n+k); 需要 O(k) 額外空間
基數排序(radix sort)— O(n·k); 需要 O(n) 額外空間
Gnome 排序— O(n^2)
圖書館排序— O(nlogn) with high probability,需要 (1+ε)n額外空間
不穩定的
選擇排序(selection sort)— O(n^2)
希爾排序(shell sort)— O(nlogn) 如果使用最佳的現在版本
組合排序— O(nlogn)
堆排序(heapsort)— O(nlogn)
平滑排序— O(nlogn)
快速排序(quicksort)— O(nlogn) 期望時間,O(n^2) 最壞情況; 對於大的、亂數列表一般相信是最快的已知排序
Introsort— O(nlogn)
耐心排序— O(nlogn+k) 最壞情況時間,需要 額外的 O(n+k) 空間,也需要找到最長的遞增子串列(longest increasing subsequence)
不實用的
Bogo排序— O(n×n!) 期望時間,無窮的最壞情況。
Stupid sort— O(n^3); 遞歸版本需要 O(n^2) 額外存儲器
珠排序(Bead sort) — O(n) or O(√n),但需要特別的硬體
Pancake sorting— O(n),但需要特別的硬體
stooge sort——O(n^2.7)很漂亮但是很耗時
㈧ 求一排序演算法(思路或偽代碼均可)
你從左往右,從上往下遍歷每一個元素,執行一個調整函數.
這個函數大概是這樣的:
函數1(x,y):
如果
元素[x,y+1]
沒有超界
並且
元素[x,y]
大於
元素[x,y+1]
則
元素[x,y+1]
設為
目前最大的數字+1
找出全部和元素[x,y+1]關聯的元素,改變他們的值,並在他們的坐標上執行函數1.
這里所說的關聯,是指他們的初始值一樣.目前最大數字是指整個陣列中最大的數字.