经典排序算法
Wucheng

经典排序算法(C语言)

算法不包含数据结构
都是自定义外部函数
改动优化版本

冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//冒泡排序
void BubbleSort(int array[], int length)
{
int num;
_Bool swap = 1;

for (int i = 0; i < length; i++)
{
for (int j = 1; j < length - i; j++)
{
if (array[j-1] > array[j])
{
num = array[j];
array[j] = array[j-1];
array[j-1] = num;
//冒泡排序优化,若是没有进行排序,则说明前面为有序,提前结束排序
swap = 0;
}
}
if (swap) return;
swap = 1;
}
}

选择排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//选择排序
void SelectionSort(int array[], int length){
int max,min; //优化选择排序,同时取最大和最小值
int swap;
for (int i = 0; i < length/2; i++)
{
min = i, max = length - 1 - i;
for (int j = i; j < length - i; j++)
{
if(array[min] > array[j]) min = j;
if(array[max] < array[j]) max = j;
}
//最小值对调
swap = array[min];
array[min] = array[i];
array[i] = swap;
//最大值对调
swap = array[max];
array[max] = array[length-1-i];
array[length-1-i] = swap;
}

}

插入排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void InsertionSort(int array[], int length){
int num;
for (int i = 1; i < length; i++)
{
num = array[i];
for (int j = i; j >= 0; j--)
{
if (j == 0 || num > array[j-1])
{
array[j] = num;
break;
}
array[j] = array[j-1];
}

}

}

快速排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void QuickSort(int array[], int L, int R){
if(L < R)
{
int left = L, right = R;
int compara = array[left];
while (left < right)
{
while (left < right && array[right] > compara)
right--;

if (left < right)
{
array[left] = array[right];
left++;
}

while (left < right && array[left] < compara)
left++;

if (left < right)
{
array[right] = array[left];
right--;
}

}
array[left] = compara;

QuickSort(array, L, right -1);
QuickSort(array, left+1, R);

}
}