今天把所有排序都理了一遍 其实调试真是好东西 你弄懂思路即使你不会写你跟调试代码走一遍 然后自己写一遍就可以了
网上很多垃圾 测试都过不了再就是即使能过都改了最初的条件 可能我也会有些过不了 (ps 毕竟没有测多少)
直接复制粘贴拷就可以了
第一 冒泡排序
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
#define max 200
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
#define max 200
void maopao(int *arr,int size)
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size - i-1; j++)
{
if (arr[j] < arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
void show(int *arr,int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[max];
for (int i = 0; i < max; i++)
{
arr[i] = rand();
}
maopao(arr, sizeof(arr) / sizeof(arr[0]));
show(arr, sizeof(arr) / sizeof(arr[0]));
return 0;
}
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size - i-1; j++)
{
if (arr[j] < arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
void show(int *arr,int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[max];
for (int i = 0; i < max; i++)
{
arr[i] = rand();
}
maopao(arr, sizeof(arr) / sizeof(arr[0]));
show(arr, sizeof(arr) / sizeof(arr[0]));
return 0;
}
2选择法排序
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define SIZE 10
void xuanze(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (arr[i] < arr[j])
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
void show(int *arr,int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int *arr = (int *)malloc(sizeof(int)*SIZE);
for (int i = 0; i < SIZE; i++)
{
arr[i] = rand();
}
xuanze(arr, SIZE);
show(arr,SIZE);
return 0;
}
#include <malloc.h>
#include <stdlib.h>
#define SIZE 10
void xuanze(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (arr[i] < arr[j])
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
void show(int *arr,int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int *arr = (int *)malloc(sizeof(int)*SIZE);
for (int i = 0; i < SIZE; i++)
{
arr[i] = rand();
}
xuanze(arr, SIZE);
show(arr,SIZE);
return 0;
}
3插入排序
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include<time.h>
#include <iostream>
using namespace std;
#define N 20000
void paixu(int*);
int main()
{
int i=0;
int *arr = (int*)malloc(sizeof(int)*N);
for (i=0; i < N; i++)
{
arr[i] = rand();
}
paixu(arr);
int tmp = arr[9998];
arr[9998] = arr[9990];
arr[9990] = tmp;
double start =clock();
paixu(arr);
double end = clock();
for (i = 0; i<N; i++)
printf("%d ", arr[i]);
printf("\n");
cout << end - start;
return 0;
}
#include <stdlib.h>
#include <malloc.h>
#include<time.h>
#include <iostream>
using namespace std;
#define N 20000
void paixu(int*);
int main()
{
int i=0;
int *arr = (int*)malloc(sizeof(int)*N);
for (i=0; i < N; i++)
{
arr[i] = rand();
}
paixu(arr);
int tmp = arr[9998];
arr[9998] = arr[9990];
arr[9990] = tmp;
double start =clock();
paixu(arr);
double end = clock();
for (i = 0; i<N; i++)
printf("%d ", arr[i]);
printf("\n");
cout << end - start;
return 0;
}
void paixu(int* a) {
int i = 0, j = 0, k = 0, n = 0;
for (k = 1; k<N; k++)
{
int i = 0, j = 0, k = 0, n = 0;
for (k = 1; k<N; k++)
{
for (i = k, j = i - 1; j >= 0;)
{
if (a[j]<a[i])
{
n = a[j];
a[j] = a[i];
a[i] = n;
i--;
j = i - 1;
}
else break;
}
}
}
{
if (a[j]<a[i])
{
n = a[j];
a[j] = a[i];
a[i] = n;
i--;
j = i - 1;
}
else break;
}
}
}
4快速排序
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define N 1000000
void queck_sort_tmp(int*arr, int low, int high)
{
int tmp = low;
int tmp1 = high;
if (tmp >=tmp1)
{
return;
}
int tmp3 = arr[low];
while (low != high)
{
while (1)
{
if (low == high)
{
arr[high] = tmp3;
break;
}
if (arr[high] >tmp3)
{
high--;
}
else
{
arr[low]=arr[high];
low++;
break;
}
}
while (1)
{
if (low == high)
{
arr[high] = tmp3;
break;
}
if (arr[low] < tmp3)
{
low++;
}
else
{
arr[high] = arr[low];
high--;
break;
}
#include<malloc.h>
#include<stdlib.h>
#define N 1000000
void queck_sort_tmp(int*arr, int low, int high)
{
int tmp = low;
int tmp1 = high;
if (tmp >=tmp1)
{
return;
}
int tmp3 = arr[low];
while (low != high)
{
while (1)
{
if (low == high)
{
arr[high] = tmp3;
break;
}
if (arr[high] >tmp3)
{
high--;
}
else
{
arr[low]=arr[high];
low++;
break;
}
}
while (1)
{
if (low == high)
{
arr[high] = tmp3;
break;
}
if (arr[low] < tmp3)
{
low++;
}
else
{
arr[high] = arr[low];
high--;
break;
}
}
}
if (low == high)
{
arr[high] = tmp3;
}
queck_sort_tmp(arr, tmp, high - 1);
queck_sort_tmp(arr, low + 1, tmp1);
}
if (low == high)
{
arr[high] = tmp3;
}
queck_sort_tmp(arr, tmp, high - 1);
queck_sort_tmp(arr, low + 1, tmp1);
}
void queck_sort(int*arr,int size) //
{
queck_sort_tmp(arr, 0, size-1);
}
void show(int *arr)
{
for (int i = 0; i < N; i++)
{
printf("%d\n", arr[i]);
}
}
int main()
{
int *arr = (int *)malloc(sizeof(int)*N);
/*int arr[8] = { 8,3,3,5,10,9,7,2 };*/
for (int i = 0; i < N; i++)
{
arr[i] = rand();
}
queck_sort(arr, N);
show(arr);
return 0;
}
void queck_sort(int*arr,int size) //
{
queck_sort_tmp(arr, 0, size-1);
}
void show(int *arr)
{
for (int i = 0; i < N; i++)
{
printf("%d\n", arr[i]);
}
}
int main()
{
int *arr = (int *)malloc(sizeof(int)*N);
/*int arr[8] = { 8,3,3,5,10,9,7,2 };*/
for (int i = 0; i < N; i++)
{
arr[i] = rand();
}
queck_sort(arr, N);
show(arr);
return 0;
}
5归并排序
#include<stdio.h>
#include<stdlib.h>
#include <malloc.h>
void guibingpaix(int*arr, int low, int mid, int high)
{
int q_low = low;
int q_high = mid;
int h_low = mid + 1;
int h_high = high;
int *brr = (int *)malloc(10* sizeof(int));
//int brr[10];
int i = 0;
while (1)
{
if (arr[q_low]<arr[h_low])
{
brr[i] = arr[q_low];
i++;
q_low++;
}
else
{
brr[i] = arr[h_low];
i++;
h_low++;
}
if (h_low == h_high + 1 || q_low == q_high+1)
{
break;
}
}
if (h_low == h_high + 1)
{
while (q_low!=q_high+1)
{
brr[i] = arr[q_low];
i++;
q_low++;
}
}
else
{
while (h_low!=h_high+1)
{
brr[i] = arr[h_low];
i++;
h_low++;
}
}
int m = 0;
while (m<i)
{
arr[low++] = brr[m++];
}
free(brr);
}
void guibing_1(int*arr, int low, int high)
{
int mid = (low + high)/2;
if (low < high)
{
guibing_1(arr, low,mid);
guibing_1(arr, mid + 1, high);
guibingpaix(arr, low, mid, high);
}
}
void guibing(int *arr,int size)
{
guibing_1(arr, 0,size-1);
}
void show(int *arr,int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[9] = { 8,3,3,5,10,9,7,2,20 };
guibing(arr, sizeof(arr) / sizeof(arr[0]));
show(arr,sizeof(arr)/sizeof(arr[0]));
}
#include<stdlib.h>
#include <malloc.h>
void guibingpaix(int*arr, int low, int mid, int high)
{
int q_low = low;
int q_high = mid;
int h_low = mid + 1;
int h_high = high;
int *brr = (int *)malloc(10* sizeof(int));
//int brr[10];
int i = 0;
while (1)
{
if (arr[q_low]<arr[h_low])
{
brr[i] = arr[q_low];
i++;
q_low++;
}
else
{
brr[i] = arr[h_low];
i++;
h_low++;
}
if (h_low == h_high + 1 || q_low == q_high+1)
{
break;
}
}
if (h_low == h_high + 1)
{
while (q_low!=q_high+1)
{
brr[i] = arr[q_low];
i++;
q_low++;
}
}
else
{
while (h_low!=h_high+1)
{
brr[i] = arr[h_low];
i++;
h_low++;
}
}
int m = 0;
while (m<i)
{
arr[low++] = brr[m++];
}
free(brr);
}
void guibing_1(int*arr, int low, int high)
{
int mid = (low + high)/2;
if (low < high)
{
guibing_1(arr, low,mid);
guibing_1(arr, mid + 1, high);
guibingpaix(arr, low, mid, high);
}
}
void guibing(int *arr,int size)
{
guibing_1(arr, 0,size-1);
}
void show(int *arr,int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[9] = { 8,3,3,5,10,9,7,2,20 };
guibing(arr, sizeof(arr) / sizeof(arr[0]));
show(arr,sizeof(arr)/sizeof(arr[0]));
}
6希尔排序
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
void xier(int *arr, int n,int size)
{
for (int i = 0; i < n ; i++)
{
int f = 0;
while (1)
{
if (f == size / n + 1)
{
break;
}
int j = 0;
while (1)
{
if ((i + (j + 1)*n) >= size)
{
break;
}
if (arr[i + j*n] > arr[i + (j + 1)*n])
{
int tmp = arr[i + j*n];
arr[i + j*n] = arr[i + (j + 1)*n];
arr[i + (j + 1)*n] = tmp;
}
j++;
}
f++;
}
}
}
void show(int *arr,int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
}
#include <stdlib.h>
#define SIZE 10
void xier(int *arr, int n,int size)
{
for (int i = 0; i < n ; i++)
{
int f = 0;
while (1)
{
if (f == size / n + 1)
{
break;
}
int j = 0;
while (1)
{
if ((i + (j + 1)*n) >= size)
{
break;
}
if (arr[i + j*n] > arr[i + (j + 1)*n])
{
int tmp = arr[i + j*n];
arr[i + j*n] = arr[i + (j + 1)*n];
arr[i + (j + 1)*n] = tmp;
}
j++;
}
f++;
}
}
}
void show(int *arr,int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[SIZE] = { 1,3,2,78,11,22,99,66,12,8 };
xier(arr,5,SIZE);
show(arr, SIZE);
return 0;
}
{
int arr[SIZE] = { 1,3,2,78,11,22,99,66,12,8 };
xier(arr,5,SIZE);
show(arr, SIZE);
return 0;
}
7堆排序
#include <stdio.h>
void swap(int *arr, int fu, int zi)
{
int tmp = arr[fu];
arr[fu] = arr[zi];
arr[zi] = tmp;
}
bool cmp(int *arr, int zi_left, int zi_right)
{
return arr[zi_left] >= arr[zi_right];
}
bool cmp_1(int *arr, int zi_left, int zi_right)
{
return arr[zi_right] > arr[zi_left];
}
void tiaozhen(int *arr, int zuobiao, int len)
{
int fu = zuobiao;
int zi_right = zuobiao * 2 + 2;
int zi_left = zuobiao * 2 + 1;
if (zi_left<len&&zi_right<len)
{
if (cmp(arr, zi_left, zi_right) && arr[fu] < arr[zi_left])
{
swap(arr, fu, zi_left);
tiaozhen(arr, zi_left, len);
}
if (cmp_1(arr, zi_left, zi_right) && arr[fu] < arr[zi_right])
{
swap(arr, fu, zi_right);
tiaozhen(arr, zi_right, len);
}
}
else if (zi_right == len)
{
if (arr[zi_left] > arr[fu])
{
int tmp = arr[zi_left];
arr[zi_left] = arr[fu];
arr[fu] = tmp;
}
}
}
void duipaix(int *arr, int size)
{
int len = size;
for (int i = (len - 2) / 2; i >= 0; i--)
{
tiaozhen(arr, i, size);
}
for (int i = len; i > 0; i--)
{
tiaozhen(arr, 0, i);
int tmp = arr[0];
arr[0] = arr[i - 1];
arr[i - 1] = tmp;
}
}
void show(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[] = { 8,3,11,5,10,7,9,7,2,1,1,20,11,30,22,-1 };
duipaix(arr, sizeof(arr) / sizeof(arr[0]));
show(arr, sizeof(arr) / sizeof(arr[0]));
return 0;
}
{
int tmp = arr[fu];
arr[fu] = arr[zi];
arr[zi] = tmp;
}
bool cmp(int *arr, int zi_left, int zi_right)
{
return arr[zi_left] >= arr[zi_right];
}
bool cmp_1(int *arr, int zi_left, int zi_right)
{
return arr[zi_right] > arr[zi_left];
}
void tiaozhen(int *arr, int zuobiao, int len)
{
int fu = zuobiao;
int zi_right = zuobiao * 2 + 2;
int zi_left = zuobiao * 2 + 1;
if (zi_left<len&&zi_right<len)
{
if (cmp(arr, zi_left, zi_right) && arr[fu] < arr[zi_left])
{
swap(arr, fu, zi_left);
tiaozhen(arr, zi_left, len);
}
if (cmp_1(arr, zi_left, zi_right) && arr[fu] < arr[zi_right])
{
swap(arr, fu, zi_right);
tiaozhen(arr, zi_right, len);
}
}
else if (zi_right == len)
{
if (arr[zi_left] > arr[fu])
{
int tmp = arr[zi_left];
arr[zi_left] = arr[fu];
arr[fu] = tmp;
}
}
}
void duipaix(int *arr, int size)
{
int len = size;
for (int i = (len - 2) / 2; i >= 0; i--)
{
tiaozhen(arr, i, size);
}
for (int i = len; i > 0; i--)
{
tiaozhen(arr, 0, i);
int tmp = arr[0];
arr[0] = arr[i - 1];
arr[i - 1] = tmp;
}
}
void show(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[] = { 8,3,11,5,10,7,9,7,2,1,1,20,11,30,22,-1 };
duipaix(arr, sizeof(arr) / sizeof(arr[0]));
show(arr, sizeof(arr) / sizeof(arr[0]));
return 0;
}
就码了怎么多如果不清楚机制可以 加qq 543247517 互相学习