#include <stdio.h>
#include <stdlib.h>
void insertSort(int *a,int n)
{
//n^2
if (NULL == a)
{
return;
}
int i = 0;
int j = 0;
for (i = 1; i < n; i++)
{
int temp = a[i];
for (j = i-1; j >=0; j--)
{
if (a[j] >temp)
{
a[j + 1] = a[j];
}
else//终止条件
{
break;
}
}
a[j+1] = temp;
}
}
void selectSort(int *a, int n)
{
//n^2
if (NULL == a)
{
return;
}
int i = 0;
int j = 0;
int min = 0;
for (i = 0; i < n-1; i++)
{
min = i;
for (j = i; j < n; j++)
{
if (a[j]<a[min])
{
min = j;
}
}
int temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
void bubbleSort(int *a, int n)
{
int flag = 1;//标志位---------------
for (int j = 0; j < n-1&&flag; j++)
{
flag = 0;//----------------
for (int i = j; i < n-1; i++)
{
if (a[i]>a[i + 1])
{
int temp = a[i + 1];
a[i + 1] = a[i];
a[i] = temp;
flag = 1;//------------------
}
}
}
}
void print(int *a, int n)
{
if (NULL == a)
{
return;
}
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
void twoSort(int *a, int na, int *b, int nb,int *c)
{
insertSort(a, na);
insertSort(b, nb);
int i = 0;
int j = 0;
int k = 0;
//a--i b---j c--k
while( i < j)
{
if (a[i] < b[j])
{
c[k] = a[i];
i++;
k++;
}
else
{
c[k] = b[j];
j++;
k++;
}
}
if (i >= na)
{
while (j < nb)
{
c[k++] = b[j++];
}
}
if (j >= nb)
{
while (i < na)
{
c[k++] = a[i++];
}
}
}
//归并
void merge(int *a,int left,int right)
{
int mid = (right + left) / 2;
int i = left;
int j = mid;
int len = right - left + 1;
int *temp = (int *)malloc(sizeof(int)*len);
int k = 0;
while (i <mid&&j <right)
{
if (a[i] <a[j])
{
temp[k++] = a[i++];
}
else
{
temp[k++] = a[j++];
}
}
while (i <mid)
{
temp[k++] = a[i++];
}
while (j<right)
{
temp[k++] = a[j++];
}
for (int i = left,j=0; i <right; i++,j++)//把排好序的数组放回原数组
{
a[i] = temp[j];
}
free(temp);
}
int mergeSort(int *a, int left, int right)
{//8个数----0 1 2 3 4 5 6 7
//7个数--0,1,2,3, 4,5,6
int mid = (left + right) / 2;
if (right-left==1 )//就这个终止写成了right==left,,,调了有4小时,真他么操蛋
{
return 0;
}
mergeSort(a, left, mid); //0,1,2,3 0,1,2
mergeSort(a, mid , right);//4,5,6,7 3,4,5,6
merge(a, left,right);
}
void test1()
{
//int a[] = { 9 };
//int a[] = { 9,1 };
//int a[] = { 9,1,2 };
//int a[] = { 9,10,7,8};
//int a[] = { 9, 10, 6, 7, 8 };
//int a[] = { 5, 1, 3, 2, 6, 8, 23, 12,17 };
//int a[] = { 5, 41, 3, 12, 66, 8, 23, 12, 17 };
int a[] = { 6,5,4,3,2,1,1,0 };
int len = sizeof(a)/sizeof(int);
mergeSort(a, 0, len);
print(a, len);
}
void main()
{
test1();
getchar();
}
c语言简单实现 冒泡,插入,选择,归并排序
最新推荐文章于 2022-08-25 17:08:22 发布