排序,去重,演算法

2021-10-23 19:07:19 字數 1416 閱讀 1396

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 需求是這樣的 選擇資料後點選勾選 會把資料 放到乙個全域性變數裡,然後點選另外乙個提交按鈕 彈出乙個視窗 載入這些已經勾選的資料,進行預覽勾選的資料和提交。隱藏的需求之一就是預覽的時候不能看到重複的資料,或者說勾選的時候需要去重。實...