今天学习了选择排序和归并排序的算法实现
并且学习到了一些新的学习方法,想在博客里面记录一下
1.前期不会自己写一些程序,没有关系,先看别人的代码,然后把他们的代码中的精华部分,也就是那一段关于你不会的算法或者你不写的一些函数,你先把他们给背下来。
当然让你背下来不是说让你一个单词一份单词的背,那样也是很枯燥的一件事,我们要做的是先要了解这段代码的思想,然后再自己在编译器上面进行编译,编译通过了之后呢,再打一遍这样重复个3~5遍基本上这段代码也就掌握下来了,然后呢就可以进行默写了。
这样就积累了一段代码,我们要做的是平时可以先看教程,让前人栽的树得到应有的发挥之后呢,再自己写代码。虽然说理工科不是像文科一样的--靠背。但是,经过我的亲身经历,背代码确实是在短时间内提升自己的一个好的办法。
今天呢学了快速排序,和归并排序,并且完成了算法实现
下面是快速排序的C++算法实现
#include<iostream>
using namespace std;
const int N = 10e6 + 10;
int n;
int q[N];
void quick_sort(int q[], int l, int r)
{
if(l >= r) return ;
int x = q[i], i = l - 1, j = r + 1;
while(i < j)
{
do i++; while(q[i] < x);
do j++; while(q[j] > x);
if(i > j)
{
int temp = q[i];
q[i] = q[j];
q[j] = temp;
}
}
quick_sort(q, l, j);
quick_sort(q, j + 1, r);
}
int main ()
{
scanf_s("%d",&n);
for(int i = 0; i < n; i ++) scanf("%d",&q[i]);
quick_sort(q, 0, n - 1);
for(int i = 0; i < n; i ++) printf("%d",q[i]);
return 0;
}
下面是归并排序的C++算法实现
#include<iostream>
using namespace std;
const int N = 10e6 + 10;
int n;
int q[N], tmp[N];
void merge_sort(int q[], int l, int r)
{
if(l >= r) return;
int mid = l + r >> 1;
merge_sort(q,l,mid),merge_sort(q, mid + 1 , r);
int k = 0, i = 1, j = mid + 1;
while(i <= mid && j <= r)
{
if(q[i] <= q[j]) tmp[k++] = q[i];
else tmp[k++] = q[j];
}
while(i <= j)
temp[k ++] = q[i ++];
while(j <= r)
temp[k ++] = q[j ++];
for(int i = 1, j = 0; i < r; i ++, j ++) q[i] = tmp[j];
}
int main ()
{
scanf_s("%d"&n);
for(int i =0; i < n; i ++) scanf_s("%d",&q[i]);
merge_sort(q, 0, n-1);
for(int i = 0; i < n; i ++) printf("%d",q[i]);
return 0;
}