短学期最后一个作业,程序设计,我们写了N久,结果代码无法封装到MFC中,于是改成了DOS,在期限的最后一个晚上,我仔细检查了一下全局变量的声明,结果发现在初始化头文件中声明了一个多余的实例,我把它去掉之后,然后在Afxstd中声明变量变量,然后在各个文件中外部引用,结果可以用了,于是我们又信心十足,把代码集装到MFC中,经过反复的调试,在晚十二点之前,成果终于出来了......在这个过程中,我们克服了很多困难,比如文件操作,数据的传送和保存,有时候一个小错误连调试都无法解决,害得我们常常要浪费好几个小时,可惜今天老师什么也没问,直接让我们PASS了,虽然感觉算法简单了点,可是这都是华哥一句一句代码写进去的啊!华哥纯爷们!!!没有参考任何源程序.我的框架也刚好和代码吻合,这说明在开始进行工作前,协商好变量,函数是非常重要的,不然效率会非常低下!
当我们决定改成DOS时,曾非常沮丧,可是在别人的鄙视下,我们不认输,战胜了可恶的MFC!,最终战胜了自己!同志们啊,要相信哥,哥的话是对的,还是士兵突击里的那句话:不抛弃!也不放弃!
在这次大作业下,我得到了很多东西,第一个是团体合作,其实这也是第一次在团队中做程序设计,团队的成员都是老师分配,彼此之间的特点不熟悉,一开始我还担心什么沟通问题,结果都是白担心了,大家的合作非常愉快,特别是框架和代码块的吻合过程实在是天衣无缝,我看到别人的设计都是在一台机器线性工作,而我们是同时进行,并且结果配合得非常好,这让我体会到,事先在小组中讨论好工作的开展是非常重要的.
第二个是彼此的信任和鼓励,我们在调试过程中遇到了很多困难,有时候你的代码错了,有时候我的代码错了,可是我们不相互埋怨,而是耐心的查找错误,对对方非常信任,相信一定能够解决这个问题.在这个过程中,我体会到一个道理,一个让别人感到有安全感,可以信任的人,才是成熟的人,所以我在这次合作中,心里一直有一个信念,绝不能让队友失望,所以才有了在最后时刻重用MFC的精彩一幕,每当我们克服一个BUG时都非常的兴奋.所以从现在开始,我要让自己的父母不再为自己担心,要让自己喜欢的人不再为自己感到失望,要让身边的人感觉自己值得信任!
像许三多那样,傻傻地笑,不为别人的一些无意地伤人话感到气愤,何必为了一些小人之心的话语而伤了自己的心情呢?像许三多那样,傻傻地坚持,不抛弃不放弃!坚持自己的理想,坚持自己的感情!所以,我决不放弃某人!!!!!!某人你看到了吗????
- //************************ sorts.h ***************************
- // Generic sorting algorithms
- // overloading of < and = required
- //conflict with <algorithms>, <queue>
- //template<class T>
- //inline void swap (T& e1, T& e2) {
- // T tmp = e1; e1 = e2; e2 = tmp;
- //}
- template<class T>
- void insertionsort(T data[], int n) {
- for (int i = 1, j; i < n; i++) {
- T tmp = data[i];
- for (j = i; j > 0 && tmp < data[j-1]; j--)
- data[j] = data[j-1];
- data[j] = tmp;
- }
- }
- template<class T>
- void selectionsort(T data[], int n) {
- for (int i = 0, least, j; i < n-1; i++) {
- for (j = i+1, least = i; j < n; j++)
- if (data[j] < data[least])
- least = j;
- swap(data[least],data[i]);
- }
- }
- template<class T>
- void bubblesort(T data[], int n) {
- for (int i = 0; i < n-1; i++)
- for (int j = n-1; j > i; --j)
- if (data[j] < data[j-1])
- swap(data[j],data[j-1]);
- }
- template<class T>
- void ShellSort(T data[], int arrSize) {
- register int i, j, hCnt, h;
- int increments[20], k;
- // create an appropriate number of increments h
- for (h = 1, i = 0; h < arrSize; i++) {
- increments[i] = h;
- h = 3*h + 1;
- }
- // loop on the number of different increments h
- for (i--; i >= 0; i--) {
- h = increments[i];
- // loop on the number of subarrays h-sorted in ith pass
- for (hCnt = h; hCnt<2*h; hCnt++) {
- // insertion sort for subarray containing every hth element of array data
- for (j = hCnt; j < arrSize; ) {
- T tmp = data[j];
- k = j;
- while (k-h >= 0 && tmp < data[k-h]) {
- data[k] = data[k-h];
- k -= h;
- }
- data[k] = tmp;
- j += h;
- }
- }
- }
- }
- template<class T>
- void moveDown (T data[], int first, int last) {
- int largest = 2*first + 1;
- while (largest <= last) {
- if (largest < last && // first has two children (at 2*first+1 and
- data[largest] < data[largest+1]) // 2*first+2) and the second
- largest++; // is larger than the first;
- if (data[first] < data[largest]) { // if necessary,
- swap(data[first],data[largest]);// swap child and parent,
- first = largest; // and move down;
- largest = 2*first+1;
- }
- else largest = last+1; // to exit the loop: the heap property
- } // isn't violated by data[first];
- }
- template<class T>
- void heapsort(T data[], int size) {
- int i;
- for (i = size/2 - 1; i >= 0; --i) // create the heap;
- moveDown (data,i,size-1);
- for (i = size-1; i >= 1; --i) {
- swap(data[0],data[i]); // move the largest item to data[i];
- moveDown(data,0,i-1); // restore the heap property;
- }
- }
- template<class T>
- void quicksort(T data[], int first, int last) {
- int lower = first+1, upper = last;
- swap(data[first],data[(first+last)/2]);
- T bound = data[first];
- while (lower <= upper) {
- while (data[lower] < bound)
- lower++;
- while (bound < data[upper])
- upper--;
- if (lower < upper)
- swap(data[lower++],data[upper--]);
- else lower++;
- }
- swap(data[upper],data[first]);
- if (first < upper-1)
- quicksort (data,first,upper-1);
- if (upper+1 < last)
- quicksort (data,upper+1,last);
- }
- template<class T>
- void quicksort(T data[], int n) {
- int i, max;
- if (n < 2)
- return;
- for (i = 1, max = 0; i < n; i++)// find the largest
- if (data[max] < data[i]) // element and put it
- max = i; // at the end of data[];
- swap(data[n-1],data[max]); // largest el is now in its
- quicksort(data,0,n-2); // final position;
- }
- template<class T>
- void merge(T array1[], int first, int last) {
- int mid = (first + last) / 2;
- int i1 = 0, i2 = first, i3 = mid + 1;
- while (i2 <= mid && i3 <= last)
- if (array1[i2] < array1[i3])
- temp[i1++] = array1[i2++];
- else temp[i1++] = array1[i3++];
- while (i2 <= mid)
- temp[i1++] = array1[i2++];
- while (i3 <= last)
- temp[i1++] = array1[i3++];
- for (i1 = 0, i2 = first; i2 <= last; array1[i2++] = temp[i1++]);
- }
- template<class T>
- void mergesort(T data[], int first, int last) {
- if (first < last) {
- int mid = (first + last) / 2;
- mergesort (data, first, mid);
- mergesort (data, mid+1, last);
- merge (data, first, last);
- }
- }
- #include <queue>
- #include <stack>
- using namespace std;
- template<class T>
- class Queue : public queue<T> {
- public:
- T dequeue() {
- T tmp = front();
- queue<T>::pop();
- return tmp;
- }
- void enqueue(const T& el) {
- push(el);
- }
- };
- template<class T>
- void radixsort(T data[], int n) {
- register int i, j, k, factor;
- const int radix = 10;
- const int digits = 5;
- Queue<T> queues[radix];
- for (i = 0, factor = 1; i < digits; factor *= radix, i++) {
- for (j = 0; j < n; j++)
- queues[(data[j] / factor) % radix].enqueue(data[j]);
- for (j = k = 0; j < radix; j++)
- while (!queues[j].empty())
- data[k++] = queues[j].dequeue();
- }
- }
- template<class T>
- void bitRadixsort(T data[], int n) {
- register int i, j, k, mask = 1;
- const int bits = sizeof(T)*8;
- Queue<T> queues[2];
- for (i = 0; i < bits; i++) {
- for (j = 0; j < n; j++)
- queues[data[j] & mask ? 1 : 0].enqueue(data[j]);
- mask <<= 1;
- k = 0;
- while (!queues[0].empty())
- data[k++] = queues[0].dequeue();
- while (!queues[1].empty())
- data[k++] = queues[1].dequeue();
- }
- }
- void inline clear(int& q) {
- q = -1;
- }
- int inline isEmpty(int q) {
- return q == -1;
- }
- template<class T>
- class RadixSortNode {
- public:
- T *arr;
- RadixSortNode *next;
- };
- template<class T>
- void radixsort2(T data[], int n) {
- register int d, j, k, factor, where;
- const int radix = 10;
- const int digits = 5;
- RadixSortNode<T> n1, n2, *p1, *p2;
- n1.arr = data;
- n2.arr = new T[n];
- for (j = 0; j < n; j++)
- n2.arr[j] = data[j];
- int *queue = new int[n], queueHeads[radix], queueTails[radix];
- p1 = n2.next = &n1;
- p2 = n1.next = &n2;
- for (d = 0, factor = 1; d < digits; factor *= radix, d++) {
- for (j = 0; j < radix; j++)
- clear(queueHeads[j]);
- for (j = 0; j < n; j++) {
- where = (p1->arr[j] / factor) % radix;
- if (isEmpty(queueHeads[where]))
- queueTails[where] = queueHeads[where] = j;
- else {
- queue[queueTails[where]] = j;
- queueTails[where] = j;
- }
- }
- for (j = 0; j < radix; j++)
- if (!(isEmpty(queueHeads[j])))
- clear(queue[queueTails[j]]);
- for (j = k = 0; j < radix; j++)
- while (!(isEmpty(queueHeads[j]))) {
- p2->arr[k++] = p1->arr[queueHeads[j]];
- queueHeads[j] = queue[queueHeads[j]];
- }
- p2 = p2->next;
- p1 = p1->next;
- }
- if (digits % 2 != 0) // if digits is an odd number;
- for (d = 0; d < n; d++)
- data[d] = p1->arr[d];
- }
- template<class T>
- void bitRadixsort2(T data[], int n) {
- register int d, j, k, where, mask = 1;
- const int radix = 10;
- const int digits = 5;
- const int bits = sizeof(T)*8;
- RadixSortNode<T> n1, n2, *p1, *p2;
- n1.arr = data;
- n2.arr = new T[n];
- for (j = 0; j < n; j++)
- n2.arr[j] = data[j];
- int *queue = new int[n], queueHeads[radix], queueTails[radix];
- p1 = n2.next = &n1;
- p2 = n1.next = &n2;
- for (d = 0; d < bits; d++, mask <<= 1) {
- clear(queueHeads[0]);
- clear(queueHeads[1]);
- for (j = 0; j < n; j++) {
- where = p1->arr[j] & mask ? 1 : 0;
- if (isEmpty(queueHeads[where]))
- queueTails[where] = queueHeads[where] = j;
- else {
- queue[queueTails[where]] = j;
- queueTails[where] = j;
- }
- }
- for (j = 0; j < 2; j++)
- if (!(isEmpty(queueHeads[j])))
- clear(queue[queueTails[j]]);
- for (j = k = 0; j < 2; j++)
- while (!(isEmpty(queueHeads[j]))) {
- p2->arr[k++] = p1->arr[queueHeads[j]];
- queueHeads[j] = queue[queueHeads[j]];
- }
- p2 = p2->next;
- p1 = p1->next;
- }
- if (digits % 2 != 0) // if digits is an odd number;
- for (d = 0; d < n; d++)
- data[d] = p1->arr[d];
- }