//Bubble_sort(冒泡排序) voidBubble_sort(int ori[], int s, int e){ for (int i = 0 ; i < e - s ; i++) { //一共总次数-1 =(e-s+1)-1 = e-s次 for (int j = s ; j < e - i ; j ++) { if (ori[j] > ori[j + 1]) { swap(ori[j],ori[j+1]); } } } }
C++:
1 2 3 4 5 6 7 8 9 10
voidbubbleSort(vector<int > & v){ int n = v.size(); for(int i = 0 ; i < n ; i ++){ for(int j = 0 ; j < i ; j ++){ if(v[j] > v[j+1]){ swap(v[j], v[j+1]); } } } }
//Selection_sort(选择排序) voidSelection_sort(int ori[], int s, int e){ for (int i = s ; i < e ; i ++) { int min_ = ori[i]; //每次都找到[i,e]内的最小值ori[f] int f = i; for (int j = i + 1; j <= e ; j ++) { if (ori[j] < min_) { min_ = ori[j]; f = j; } } swap(ori[f],ori[i]);//交换ori[f]和ori[i] } }
C++:
1 2 3 4 5 6 7 8 9 10 11 12
voidselectSort(vector<int > & v){ int n = v.size(); for(int i = 0 ; i < n ; i ++){ int f = i; for(int j = i+1 ; j < n ; j ++){ if(v[j] < v[f]){ f = j; } } swap(v[f], v[i]); } }
//Insert_sort插入排序(扑克牌排序) voidInsert_sort(int ori[], int s, int e){ for (int i = s + 1 ; i <= e; i ++) { int val = ori[i]; int j = i - 1; while(j >= s && ori[j] >= val) { ori[j + 1] = ori[j]; //数组往后退 j--; } ori[j + 1] = val; //插入 } }
C++:
1 2 3 4 5 6 7 8 9 10 11 12
voidinsertSort(vector<int > & v){ int n = v.size(); for(int i = 1 ; i < n ; i ++){ int t = v[i]; int j = i-1; while(j >= 0 && v[j] > t){ v[j+1] = v[j]; j--; } v[j+1] = t; } }
voidmerge(int ori[], int s, int e, int tmp[]){ int m = s + (e - s) / 2; int pt = 0; int p1 = s, p2 = m + 1;
while (p1 <= m && p2 <= e) { //把已经排好序的数组,合并 if (ori[p1] < ori[p2]) tmp[pt++] = ori[p1++]; else tmp[pt++] = ori[p2++]; } while (p1 <= m) tmp[pt++] = ori[p1++]; while (p2 <= e) tmp[pt++] = ori[p2++];
for (int i = 0 ; i < pt ; i ++) ori[s + i] = tmp[i]; }
voidmerge_sort(int ori[], int s, int e, int tmp[]){ int m = s + (e - s) / 2; if (e > s) { //终止条件 merge_sort(ori, s, m, tmp); //切成两半,分别排序; merge_sort(ori, m + 1, e, tmp); merge(ori, s, e, tmp); //合并排序好的两半 } elsereturn; }
//从某点(坐标)向下调整 voidjustDown(int p){ int now = p; while(now <= siz){ int t = now; if(2*now <= siz && heap[2*now] < heap[t]) t = 2*now; if(2*now+1 <= siz && heap[2*now+1] < heap[t]) t = 2*now+1; if(t != now){ swap(heap[t], heap[now]); now = t; }elsebreak; } }
//从某点(坐标)向上调整 voidjustUp(int p){ int now = p; while(now >= 1){ int f = now/2; if(f >= 1 && heap[f] >= heap[now]){ swap(heap[now], heap[f]); now = f; }elsebreak; } }
//直接建堆 //读入无序数组 //从n/2(最后一个非根节点)开始,逐个向上调整 voidcreate(int n){ siz = n; for(int i = 1 ; i <= n ; i ++){ cin>>heap[i]; } for(int i = n/2 ; i >= 1 ; i --){ justDown(i); } }
//存储结构体 structpoint{ int x,y; int times; friendbooloperator < (point a, point b){ return a.times > b.times; //重载小于号使得小的先出队列 } }priority_queue<point> q;
intjudge(){ // 1 - 大根堆,2 - 小根堆,3 - 非堆 bool ma,mi; ma = mi = true; for(int i = 0 ; i < n ; i ++){ int l = i*2 + 1; int r = i*2 + 2; if((l < n && layer[l] > layer[i]) || (r < n && layer[r] > layer[i])){ ma = false; break; } } if(ma) return1; for(int i = 0 ; i < n ; i ++){ int l = i*2 + 1; int r = i*2 + 2; if((l < n && layer[l] < layer[i]) || (r < n && layer[r] < layer[i])){ mi = false; break; } } if(mi) return2; return3; }