C语言三种常用的排序方法:冒泡排序,插入排序,快速排序
冒泡排序:
void maopao(int a[])
{
int temp;
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - i - 1; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
插入排序:
void insert(int a[])
{
int temp;
int j;
for (int i = 1; i < n; i++)
{
j = i;
temp = a[i];
while (temp < a[j - 1] && j >= 1)
{
a[j] = a[j - 1];
j--;
}
a[j] = temp;
}
}
快速排序:
void Quick_sort(int low,int high,int a[])
{
if (low >= high)
return;
int first = low;
int last = high;
int key = a[first];
while (first < last)
{
while (first < last&&a[last]>=key)
{
last--;
}
a[first] = a[last];
while (first<last&&a[first]<= key)
first++;
a[last] = a[first];
}
a[first] = key;
Quick_sort(low, first - 1, a);
Quick_sort(first+1, high, a);
}
堆排序:
//堆调整,构建大顶堆
void adjust(int a[], int i, int n)
{
int child, tmp;
for (; 2 * i + 1 < n; i = child)
{
child = 2 * i + 1;
if (child<n - 1 && a[child] < a[child + 1])
child++;
if (a[i] < a[child])
{
tmp = a[child];
a[child] = a[i];
a[i] = tmp;
}
else
break;
}
}
void heap(int a[], int n)
{
int temp;
//将数组进行大顶堆的构建
for (int i = n / 2 - 1; i >= 0; i--)
adjust(a, i, n);
//将堆顶元素放到数组的最后一位,然后逐渐缩小数组
for (int i = n-1; i >0; i--)
{
temp = a[i];
a[i] = a[0];
a[0] = temp;
adjust(a, 0, i);
}
}
希尔排序:
是在插入排序的基础上采用希尔增量,初始增量为N/2,然后每次增量为上一次的二分之一
void shell(int a[], int n)
{
int increase,tmp;
for (increase = n / 2; increase >= 1; increase /= 2)
for (int i = increase; i < n; i++)
{
int j;
tmp = a[i];
for ( j = i; j >=0&&a[j-increase]>tmp; j -= increase)
{
a[j] = a[j - increase];
}
a[j] = tmp;
}
}