1.歸併排序
a.步驟提要:將原有陣列分割平分成兩個陣列,然後分別排序。將排好序的區域性陣列整合成乙個陣列,然後遞迴執行此過程
b.過程:
//
// created by 葉子 on 2018/1/27.
// 歸併排序
//#include "iostream"
using namespace std;
#define max 500000
#define sentinel 20000000;
int l[max/2+2],r[max/2+2];
int cnt;
void merge(int a,int n,int left,int mid,int right) else
}}void mergesort(int a, int n, int left, int right)
}int main()
cout << endl;
cout << cnt <#define max 100000
int a[max],n;
int partition(int p,int r)
}t = a[i+1];a[i+1]= a[r];a[r] = t;
return i+1;
}int main()
printf("\n");
return 0;
}
3.快速排序:
a.題目:將指定的撲克在考慮花色和點數的情況下按公升序排列,另外判斷這些輸入的數字和輸出的順序是否一致
b.步驟:
1)以陣列的最末尾的值為標準值「分割」陣列
2)將分割好的陣列執行快速排序
3)合併,然後遞迴執行這三步
c.注意點:要提高效率,可以在每次分割時以需要分割的陣列的「中間值」為標準值
d.**:
//
// created by 葉子 on 2018/1/27.
// 快速排序與歸併排序的比較
//#include #define max 100000
#define sentinel 2000000000
struct card ;
struct card l[max / 2 + 2],r[max / 2 + 2];
void merge(struct card a,int n ,int left,int mid,int right)else
}}void mergesort(struct card a,int n ,int left,int right)
}int partition(struct card a,int n ,int p ,int r)
}t = a[i+1];a[i+1] = a[r];a[r] = t;
return i+1;
}void quicksort(struct card a,int n,int p ,int r)
}int main()
mergesort(a,n,0,n);
quicksort(b,n,0,n-1);
for ( i = 0 ; i < n ; i ++)
if ( stable == 1) printf("stable\n");
else printf("not stable\n");
for ( i = 0 ; i < n ; i ++)
return 0;
}
4.計數排序:
b.詳述:對於輸入陣列a的各元素a(j)進行排序時,將小於等於a(j)的元素數記錄在計數陣列c中,然後根據c中的數值計算a(j)在輸出陣列b中的位置。考慮到存在多個相等元素的情況,我們還需要在輸出元素a(j)【加入b】之後修正計數用的c(a(j))
c.注意:其執行所需要的時間及記憶體空間也與a(j)的最大值成正比
d.**:
//
// created by 葉子 on 2018/1/28.
// 計數排序
#include "stdio.h"
#include "stdlib.h"
#define max 200001
#define vmax 10000
int main()
for ( i = 1 ; i <= vmax ; i ++) c[i] = c[i] + c[i-1];
for ( j = 1 ; j <= n ; j ++)
for ( i = 1 ; i <=n ; i ++)
printf("\n");
return 0;
}
5.使用標準庫排序:
a.定義:使用標準庫里的sort
b.**:
//
// created by 葉子 on 2018/1/28.
// 用c++內建函式排序
//#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;
int main()
sort(v.begin(),v.end());
for ( int i = 0 ; i < v.size() ; i ++)
cout << endl;
return 0;
}
6.最小成本排序:
a.題目:求給指定的陣列進行排序的最小交換次數
b.解析:需要考慮「借整體最小元素」與「不借整體最小元素」兩種情況
c.**:
//
// created by 葉子 on 2018/1/28.
// 最小成本統計
//#include "iostream"
#include "algorithm"
using namespace std;
static const int max = 1000;
static const int vmax = 10000;
int n,a[max],s;
int b[max],t[vmax + 1];
int solve()
sort(b,b+n);
for ( int i = 0 ; i < n ; i ++) t[b[i]] = i ;
for ( int i = 0 ; i < n ; i ++)
ans += min(s+(an-2) * m,m+s+(an+1)*s);
}return ans;
}int main()
int ans = solve();
cout << ans << endl;
return 0;
}
資料結構之排序演算法(五
索引堆 function swap arr,x,y 索引堆 儲存結構為兩個陣列 第乙個陣列 為索引 第二個陣列為 值 每次取最大值的時候,只改變索引結構 而值不變 這樣保證了資料的一致性 class maxheap 返回 資料的大小 size 判斷item是否是 空的 isempty 新增新元素 i...
資料結構學習之 排序高階(堆排序)
氣泡排序 一種比較容易理解的排序演算法,可以優化的程度也比較有限 平均 o n 2 最壞 o n 2 最好 o n 最好情況需要在進行迴圈之前加入標誌位,若一次遍歷中,沒有任何兩個資料被交換,則認為序列已經有序,跳出迴圈。此時,時間複雜度為o n 插入排序 選擇乙個資料插入到前面已經排好的有序佇列之...
資料結構和演算法之排序五 選擇排序
所以說呀這就是強盜行為,遇到自己想的就拿過來,還有比這更強盜的麼。上 表示敬意 public static void selectsort int arr 我們可以看見我們控制次數的時候進行了 1的操作,這時因為你都保證前邊所有的資料都通過排序處理好了,那麼最後乙個可不就是無冕之王,待著最後了唄。裡...