今天对一些排序简单的总结了一下,主要有冒泡排序,选择排序,快速排序和归并排序。
int a[10] = {8,5,2,3,6,9,7,4,1,0};
冒泡排序
冒泡排序应该是我们在学习过程中学习到的第一个排序算法,
for (int i=0;i<10-1;i++)
for (int j=0;j<10-i;j++)
{
if (a[j]>a[j+1])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
选择排序
for (int i=0;i<10-1;i++)
{
maxx = a[i];
t=i;
for (int j=i;j<10;j++)
{
if (maxx>a[j])
{
maxx = a[j];
t=j;
}
}
a[t]=a[i];
a[i] = maxx;
}
快速排序
void Qsort(int A[], int l, int r)
{
int a = A[l];
int i = l, j = r, t;
if (i>=j)
return ;
while (i<j)
{
while (i<j&&A[j]>=a)
j--;
while (i<j&&A[i]<=a)
i++;
if (i < j)
{
t = A[i];
A[i] = A[j];
A[j] = t;
}
}
A[l] = A[i];
A[i] = a;
Qsort(A, l, i-1);
Qsort(A, i+1, r);
}
归并排序
void Merge(int lst_one[], int one_size, int lst_two[], int two_size)
{
int temp[one_size+two_size];
int k=0,i=0,j=0;
while (i<one_size&&j<two_size)
{
if (lst_one[i]<lst_two[j])
temp[k++] = lst_one[i++];
else
temp[k++] = lst_two[j++];
}
while (i<one_size)
temp[k++] = lst_one[i++];
while (j<two_size)
temp[k++] = lst_two[j++];
for (int n=0;n<one_size+two_size;n++)
lst_one[n] = temp[n];
}
void MergeSort(int A[], int Asize)
{
if (Asize<=1)
return ;
int *lst_one = A;
int one_size = Asize/2;
int *lst_two = A + one_size;
int two_size = Asize - one_size;
MergeSort(lst_one, one_size);
MergeSort(lst_two, two_size);
Merge(lst_one, one_size, lst_two, two_size);
}