Tab replace to four space

This commit is contained in:
purp1e
2019-07-12 09:51:14 +08:00
parent f547cca091
commit 83f3b1760f
+159 -159
View File
@@ -6,19 +6,19 @@
// 插入排序 // 插入排序
void insert_sort(int *a,int length){ void insert_sort(int *a,int length){
int tmp ; int tmp ;
int i,j; int i,j;
for (i = 1; i < length; ++i) for (i = 1; i < length; ++i)
{ {
for ( tmp=a[i],j=i-1 ; j>=0 && a[j] > tmp ; j--) for ( tmp=a[i],j=i-1 ; j>=0 && a[j] > tmp ; j--)
{ {
a[j+1]=a[j]; a[j+1]=a[j];
} }
// j+1是插入的位置 // j+1是插入的位置
a[j+1]=tmp; a[j+1]=tmp;
} }
} }
@@ -27,29 +27,29 @@ void insert_sort(int *a,int length){
void select_sort(int *a,int length){ void select_sort(int *a,int length){
int min_index,tmp; int min_index,tmp;
int j; int j;
for (int i = 0; i < length; ++i) for (int i = 0; i < length; ++i)
{ {
for (j = i+1 ,min_index=i; j < length; ++j)// 不能写成for (int j = i+1 ,min_index=i; j < length; ++j) for (j = i+1 ,min_index=i; j < length; ++j)// 不能写成for (int j = i+1 ,min_index=i; j < length; ++j)
{ {
if (a[min_index]>a[j]) if (a[min_index]>a[j])
{ {
min_index=j; min_index=j;
} }
} }
//min_index是最小的元素的index //min_index是最小的元素的index
if (min_index!=i) if (min_index!=i)
{ {
tmp=a[i]; tmp=a[i];
a[i]=a[min_index]; a[i]=a[min_index];
a[min_index]=tmp; a[min_index]=tmp;
} }
} }
} }
@@ -58,21 +58,21 @@ void select_sort(int *a,int length){
void bubble_sort(int *a, int length){ void bubble_sort(int *a, int length){
int tmp ; int tmp ;
for (int i = 0; i < length-1; ++i) // 第i轮排序 for (int i = 0; i < length-1; ++i) // 第i轮排序
{ {
for (int j = 0; j < length-i; ++j) for (int j = 0; j < length-i; ++j)
{ {
if (a[j] > a[j+1]) if (a[j] > a[j+1])
{ {
tmp = a[j]; tmp = a[j];
a[j] = a[j+1]; a[j] = a[j+1];
a[j+1] = tmp; a[j+1] = tmp;
} }
} }
} }
} }
@@ -82,45 +82,45 @@ void bubble_sort(int *a, int length){
// 挖坑填数,2边向中间扫描 // 挖坑填数,2边向中间扫描
int partion(int *a, int start,int end){ int partion(int *a, int start,int end){
int i=start,j=end; int i=start,j=end;
int tmp = a[i]; // 这里要做越界检查 int tmp = a[i]; // 这里要做越界检查
while(i<j){ while(i<j){
// 从后向前扫描,找到第一个小于tmp的值,来填a[i] // 从后向前扫描,找到第一个小于tmp的值,来填a[i]
while(i<j && a[j]>=tmp){ while(i<j && a[j]>=tmp){
j--; j--;
} }
if (i<j)//找到了,这时候a[j]为坑 if (i<j)//找到了,这时候a[j]为坑
{ {
a[i++] = a[j]; a[i++] = a[j];
} }
// 从左向右扫描,找一个大于 tmp的 数, 去填坑a[j] // 从左向右扫描,找一个大于 tmp的 数, 去填坑a[j]
while(i<j && a[i]<tmp){ while(i<j && a[i]<tmp){
i++; i++;
} }
if (i<j) if (i<j)
{ {
a[j++]=a[i]; a[j++]=a[i];
} }
} }
//扫描完成后,i==j //扫描完成后,i==j
a[i]=tmp; a[i]=tmp;
return i; return i;
} }
void quicksort(int *a, int left, int right){ void quicksort(int *a, int left, int right){
if (left<right)//加上这个,不然有死循环,造成堆栈溢出 if (left<right)//加上这个,不然有死循环,造成堆栈溢出
{ {
int i = partion(a,left,right); int i = partion(a,left,right);
quicksort(a,left,i-1); quicksort(a,left,i-1);
quicksort(a,i+1,right); quicksort(a,i+1,right);
} }
} }
@@ -128,9 +128,9 @@ void quicksort(int *a, int left, int right){
void heap_swop(int *a,int *b){ void heap_swop(int *a,int *b){
*a = *a + *b; *a = *a + *b;
*b = *a - *b; *b = *a - *b;
*a = *a - *b; *a = *a - *b;
} }
@@ -138,28 +138,28 @@ void heap_swop(int *a,int *b){
//自顶向下调整 //自顶向下调整
void heap_public_adjust(int *a,int parent,int length){ void heap_public_adjust(int *a,int parent,int length){
// 三个数里取最大的一个 a[i],a[2i+1],a[2i+2],跟a[i]交换;然后是 a[(i-1)/2],a[i],a[i+1] .. 一直到a[0] // 三个数里取最大的一个 a[i],a[2i+1],a[2i+2],跟a[i]交换;然后是 a[(i-1)/2],a[i],a[i+1] .. 一直到a[0]
int max = parent * 2 + 1; int max = parent * 2 + 1;
while(max < length){ while(max < length){
//三个数里取最大的一个 a[tmp],a[2tmp+1],a[2tmp+2] //三个数里取最大的一个 a[tmp],a[2tmp+1],a[2tmp+2]
if (max + 1 < length && a[max] < a[max + 1])// left < right if (max + 1 < length && a[max] < a[max + 1])// left < right
{ {
max++; max++;
} }
// 和最大孩子比 // 和最大孩子比
if (a[parent] >= a[max])// parent > parent >= max(left, right) if (a[parent] >= a[max])// parent > parent >= max(left, right)
{ {
break; break;
} }
else else
{ {
heap_swop(&a[parent],&a[max]); heap_swop(&a[parent],&a[max]);
parent = max; //继续向下, 比对, 交换, 保证所有树 父节点 >= 子节点 parent = max; //继续向下, 比对, 交换, 保证所有树 父节点 >= 子节点
max = 2 * parent + 1; max = 2 * parent + 1;
} }
} }
} }
@@ -168,35 +168,35 @@ void heap_public_adjust(int *a,int parent,int length){
//反之,把最小的孩子换上来就是创建最小堆 一直到a[0] //反之,把最小的孩子换上来就是创建最小堆 一直到a[0]
void heap_build(int *a,int length){ void heap_build(int *a,int length){
for (int i = (length-2)/2; i >=0 ; --i) for (int i = (length-2)/2; i >=0 ; --i)
{ {
// 三个数里取最大的一个 a[i],a[2i+1],a[2i+2],跟a[i]交换;然后是 a[(i-1)/2],a[i],a[i+1] .. 一直到a[0] // 三个数里取最大的一个 a[i],a[2i+1],a[2i+2],跟a[i]交换;然后是 a[(i-1)/2],a[i],a[i+1] .. 一直到a[0]
heap_public_adjust(a,i,length); heap_public_adjust(a,i,length);
} }
} }
// 自顶向下调整 // 自顶向下调整
void heap_adjust(int *a,int length){ void heap_adjust(int *a,int length){
heap_public_adjust(a,0,length); //对0号调整 heap_public_adjust(a,0,length); //对0号调整
} }
void heap_sort(int *a, int length){ void heap_sort(int *a, int length){
// 建立堆 大根堆,递增排序 // 建立堆 大根堆,递增排序
heap_build(a,length); heap_build(a,length);
for (int i = length-1; i >0; --i) for (int i = length-1; i >0; --i)
{ {
//交换 //交换
heap_swop(&a[0],&a[i]); heap_swop(&a[0],&a[i]);
//调整 //调整
heap_adjust(a,i); heap_adjust(a,i);
} }
} }
@@ -208,31 +208,31 @@ void heap_sort(int *a, int length){
void merge_array(int *a,int size_a,int *b, int size_b){ void merge_array(int *a,int size_a,int *b, int size_b){
int *tmp = malloc( (size_a+size_b)*sizeof(int) ); int *tmp = malloc( (size_a+size_b)*sizeof(int) );
int i,j,k; int i,j,k;
i=j=k=0; i=j=k=0;
while(i<size_a && j<size_b){ while(i<size_a && j<size_b){
tmp[k++] = (a[i]>b[j])?b[j++]:a[i++]; tmp[k++] = (a[i]>b[j])?b[j++]:a[i++];
} }
while(i<size_a){ while(i<size_a){
tmp[k++]=a[i++]; tmp[k++]=a[i++];
} }
while(j<size_b){ while(j<size_b){
tmp[k++]=b[j++]; tmp[k++]=b[j++];
} }
for (int p = 0; p < k; ++p) for (int p = 0; p < k; ++p)
{ {
a[p] = tmp[p]; a[p] = tmp[p];
} }
free(tmp); free(tmp);
} }
@@ -240,14 +240,14 @@ void merge_array(int *a,int size_a,int *b, int size_b){
void merge_sort(int *a, int length){ void merge_sort(int *a, int length){
if (length>1) if (length>1)
{ {
merge_sort(a,length/2); merge_sort(a,length/2);
merge_sort(a+length/2,length-length/2); merge_sort(a+length/2,length-length/2);
merge_array(a,length/2,a+length/2,length-length/2); merge_array(a,length/2,a+length/2,length-length/2);
} }
@@ -261,35 +261,35 @@ void merge_sort(int *a, int length){
int main(){ int main(){
//int a[] = {4,87,2,32,5,2,9,49,49,23,45,2,41}; //int a[] = {4,87,2,32,5,2,9,49,49,23,45,2,41};
//准备5000个数 //准备5000个数
int a[Max_Number]; int a[Max_Number];
for (int i = 0; i < Max_Number; ++i) for (int i = 0; i < Max_Number; ++i)
{ {
a[i]=rand()%Max_Number; a[i]=rand()%Max_Number;
} }
clock_t start,finish; clock_t start,finish;
start = clock(); start = clock();
//merge_sort(a,sizeof(a)/sizeof(int)); // 0.002s,可以看到,归并排序还是很快的 //merge_sort(a,sizeof(a)/sizeof(int)); // 0.002s,可以看到,归并排序还是很快的
heap_sort(a,sizeof(a)/sizeof(int)); // 有buggggggg heap_sort(a,sizeof(a)/sizeof(int)); //
//quicksort(a,0,sizeof(a)/sizeof(int)-1); // 0.01s //quicksort(a,0,sizeof(a)/sizeof(int)-1); // 0.01s
//insert_sort(a,sizeof(a)/sizeof(int)); // 3.85s //insert_sort(a,sizeof(a)/sizeof(int)); // 3.85s
//select_sort(a,sizeof(a)/sizeof(int)); // 5.3s //select_sort(a,sizeof(a)/sizeof(int)); // 5.3s
//bubble_sort(a,sizeof(a)/sizeof(int)); // 12.5s //bubble_sort(a,sizeof(a)/sizeof(int)); // 12.5s
finish = clock(); finish = clock();
printf("after sort:\n"); printf("after sort:\n");
for (int i = 0; i < sizeof(a)/sizeof(int); ++i) for (int i = 0; i < sizeof(a)/sizeof(int); ++i)
{ {
printf(" %d ",a[i]); printf(" %d ",a[i]);
} }
printf("time eclipse: %.6f sec\n", (double)(finish-start)/CLOCKS_PER_SEC); // CLOCKS_PER_SEC 1000 clock()是毫秒 printf("time eclipse: %.6f sec\n", (double)(finish-start)/CLOCKS_PER_SEC); // CLOCKS_PER_SEC 1000 clock()是毫秒
return 0; return 0;
} }