5總結m表示桶的個數,n表示待排序的數的個數
先對桶清零
for(i=0;i<1000;i++)
a[i]=0;
當需要排序的物件的範圍比較小時,佔優勢
基本思想:每次比較兩個相鄰的元素,如果他們的順序錯誤就把他們交換
雙重巢狀迴圈
for(i=0;ia[j+1])
每一趟只能把乙個數的位置確定,所以n個數需要排序,需要n-1次歸為,最後乙個自然歸為
思想:「二分」的思想
每次排序的時候設定乙個基準點,將小於等於基準點的數全部放到基準點的左邊,將大於等於基準點的數全部放到基準點的右邊
最差的時間複雜度是o(n²)
平均時間複雜度為o(nlogn)
quicksort(int left,int right)
{ int i, j, t, temp;
if(left>right)
return;
temp=a[left];
i=left;
j=right;
while(i!=j)
{ while(a[j]>=temp&&i桶排序稍加改動 注意桶排序的桶不能太多,也就是元素的範圍不能太大(1~1000剛好)
for(i=0;i時間複雜度就是桶排序的時間複雜度o(m+n)
排序可以用氣泡排序或者快速排序
使用氣泡排序n不能太大(100),時間複雜度o(n²),n越大執行的時間就越長;
如果n<=10萬,
通常認為計算機每秒鐘大約執行10億次(當然實際情況要更快)
用氣泡排序需要10秒
用快速排序還不到0.0017秒。
printf("%d",a[1]); //輸出第乙個數
for(i=2;i<=n;i++)
if(a[i]!=a[i-1];
printf("%d",a[i]);
return 0;
時間複雜度有兩部分組成(排序+輸入輸出)
氣泡排序o(n²)
輸入輸出都是o(n)
整個演算法的時間複雜度為o(2*n+n²) 即o(n²)
1.桶排序最快,它的時間複雜度是o(n+m)
·····缺點:當數的範圍超過1000,無法申請出這麼大的陣列來標記數,浪費空間
2.氣泡排序是(n²)
·····缺點:浪費時間
3.快速排序是o(nlogn)費手費鍵盤
A 排序去重
有n 個1 到 1000 之間的整數 對於其中重複的數字,只保留乙個,把其餘相同的數去掉。然後再按照指定的排序方式把這些數排序。第 1 行為字母 a 或 d,a 表示按照公升序排序,d 表示按照降序排序。第 2 行開始有若干個用乙個空格或換行符分隔的正整數。相互之間用乙個空格分隔的經去重和排序後的正...
陣列快速排序 去重演算法
快速排序 快速排序 的思想很簡單,整個排序過程只需要三步 1 在資料集之中,選擇乙個元素作為 基準 pivot 2 所有小於 基準 的元素,都移到 基準 的左邊 所有大於 基準 的元 素,都移到 基準 的右邊。3 對 基準 左邊和右邊的兩個子集,不斷重複第一步和第二步,直到所有子集只剩下乙個元素為止...
js 排序,去重
前幾天 有乙個需求要做乙個 勾選的按鈕 用的前端框架時 extjs 需求是這樣的 選擇資料後點選勾選 會把資料 放到乙個全域性變數裡,然後點選另外乙個提交按鈕 彈出乙個視窗 載入這些已經勾選的資料,進行預覽勾選的資料和提交。隱藏的需求之一就是預覽的時候不能看到重複的資料,或者說勾選的時候需要去重。實...