4. ide clion
5.涉及排序 希爾排序(沒有完成) 氣泡排序 桶排序 選擇排序 快速排序 歸併排序 插入排序 外加康托展開演算法
完成且可用的排序
氣泡排序
選擇排序
插入排序
桶排序歸併排序
快速排序
外加輔助的函式
7. 確定序列是有序的
8. 自動輸入和輸出
乙個標頭檔案
乙個cpp
乙個main
乙個類 乙個main
#ifndef opp_csort_csort_h
#define opp_csort_csort_h
class csort ;
bool cantor(int arr,int n);
bool isdeterministic(int arr,int n);
public:
void manualinput(int arr,int n);
void autoinput(int arr,int n);
void autoout(int arr,int n);
void bubble(int arr,int n);//氣泡排序
void selection(int arr,int n);//選擇排序
void shell(int arr,int n);//希爾排序
void insertion(int arr,int n);//插入排序
void merge(int arr,int l,int r);//歸併排序
void quick(int arr,int l,int r);//快速排序
void bucket(int arr,int n);//桶排序
void deterministicsequence(int arr,int n);//確定序列是排好的序列
void testbubble(int arr,int n);
void testselection(int arr,int n);
void testshell(int arr,int n);
void testinsertion(int arr,int n);
void testmerge(int arr,int n);
void testquick(int arr,int n);
void testbucket(int arr,int n);
};#endif //opp_csort_csort_h
#include #include "csort.h"
using namespace std;
void csort::manualinput(int *arr, int n)
void csort::autoinput(int *arr, int n)
}}void csort::testbubble(int arr,int n)
void csort::selection(int *arr, int n) }}
}void csort::testselection(int *arr, int n)
void csort::deterministicsequence(int *arr, int n)
bool csort::cantor(int arr,int n)
}res+=con*factory[n-i-1];//被選中的數後面還有幾個數的全排列
}if(res==0) return 1;
else return 0;
}void csort::shell(int *arr, int n)
t++;tt++;
}}void csort::testbucket(int *arr, int n)
void csort::quick(int *arr, int l,int r)
int csort::part(int *arr, int l, int r)
int t;
t=arr[l];
arr[l]=arr[j];
arr[j]=t;
return j;//切分位置 就是中心位置
}void csort::testquick(int *arr, int n)
void csort::merge(int *arr, int l,int r)
void csort::mergeaux(int *arr, int l,int mid, int r)
}void csort::testmerge(int *arr, int n)
#include #include "csort.h"
#include int main()
ctime標頭檔案主要用到類clock_t
用來測試**執行的時間 單位是ms
void csort::bubble(int *arr, int n)
}}void csort::testbubble(int arr,int n)
函式的宣告都在csort類裡面 也就是標頭檔案裡面
第二個函式主要是用來測試這個演算法
下面幾個排序都是這個道理
void csort::selection(int *arr, int n) }}
}void csort::testselection(int *arr, int n)
void csort::bucket(int *arr, int n)
t++;tt++;
}}void csort::testbucket(int *arr, int n)
void csort::quick(int *arr, int l,int r)
int csort::part(int *arr, int l, int r)
int t;
t=arr[l];
arr[l]=arr[j];
arr[j]=t;
return j;//切分位置 就是中心位置
}void csort::testquick(int *arr, int n)
void csort::merge(int *arr, int l,int r)
void csort::mergeaux(int *arr, int l,int mid, int r)
}void csort::testmerge(int *arr, int n)
void csort::manualinput(int *arr, int n)
void csort::autoinput(int *arr, int n)
手動輸入
自動輸入
自動輸出
判斷序列是否有序 沒有返回值
判斷序列是否有序 有返回值 (但是我把他沒有public)
bool csort::cantor(int arr,int n)
}res+=con*factory[n-i-1];//被選中的數後面還有幾個數的全排列
}if(res==0) return 1;
else return 0;
}
唯一乙個講的 因為是我自己在剛開始學程式設計的時候想的第二個排序
第乙個是冒泡 只有這兩個是在沒有看書的情況下 完全自主的想出來的』
**
void csort::bucket(int *arr, int n)
t++;tt++;
}}void csort::testbucket(int *arr, int n)
桶排序的優點 演算法複雜度是o(n)
缺點 只能是整形變數
運用了陣列值和下標的轉換 所以只能是整形變數 很大的缺點
範圍-int的範圍到+int的範圍 應該是這個
初代的桶排序 (自己第一次想出來的)
只能是正數 和 0 很大的侷限
但是 後來想想 0當做了座標原點 但是座標是可以移動的 如果把座標原點放到陣列的** 豈不美哉
於是 算出陣列中間的位置 即為變數mid 但是就算是知道了中間的位置 陣列到底要多大 我們不知道 這裡不想用動態陣列 那咋整
於是 算出陣列的最大和最小 最大-最小 當做陣列的大小 保證接受陣列的時候陣列足夠大 沒保證避免不必要的空間 這樣就能夠比較靈活的使用了
但是還是有乙個缺點 假設最大100 最小-100 陣列就兩個數 我們卻得到了200的大小 陣列的 浪費了很大空間 於是乎我們 我們需要其他函式的幫住
在 算出兩中演算法在問題規模為n的時候演算法複雜度的函式影象都交點
那麼n小使用前者演算法 大的時候使用後者演算法 就起到了很好的轉換作用
更好的優化演算法
大致就是這樣子
演算法看**都能懂得
就不多說了額
全文至此共7947個字
排序 冒泡 插入 桶 快速 歸併
氣泡排序 includeusing namespace std int a void printarr int a,int length if flag break printarr a,length return 0 應用習題 車廂重組 在乙個舊式的火車站旁邊有一座橋,其橋面可以繞河中心的橋墩水平...
排序(冒泡 選擇 插入 快速 歸併)
今天把之前寫的排序整理了一下,之前寫的有點亂,現在把這些整合在一起,後續在接觸到別的排序演算法會繼續在這篇博文上新增。排序演算法一 氣泡排序public static void bubblesort for int i 0 iarray j 1 for int tem array 排序演算法二 選擇...
排序 冒泡 插入 選擇 快速 歸併
public class sorttest bubblesort array insertsort array selectsort array quicksort array mergesort array for int i 0 i array.length i 氣泡排序 param array...