排序在代码中用的非常普遍,所以今天我们来学下最基础的三种排序,
如果你已经烂熟于心,请跳过本文。
注:我的代码一般没有注释,我觉得没啥必要,都是基础挺简单的。
#include <stdio.h>
#include <stdlib.h>
void print(int array[], int len)
{
int i = 0;
for (i = 0; i < len; i++)
{
printf("%d ", array[i]);
}
printf("\n");
}
void swap(int array[], int i, int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
void SelectSort(int array[], int len)
{
int i = 0;
int j = 0;
int k = -1;
for (i = 0; i < len; i++)
{
k = i;
for (j = i; j < len; j++)
{
if (array[j] < array[k])
{
swap(array, j, k);
}
}
}
}
void InsertSort(int array[], int len)
{
int i = 0;
int j = 0;
int k = -1;
int temp = -1;
for (i = 1; i < len; i++)
{
k = i;
temp = array[k];
for (j = i - 1; (j >= 0) && (array[j] > temp); j--)
{
array[j + 1] = array[j];
k = j;
}
array[k] = temp;
}
}
void BubbleSort(int array[], int len)
{
int i = 0;
int j = 0;
int exchange = 1;
for (i = 0; (i < len) && exchange; i++)
{
exchange = 0;
for (j = i + 1; j < len; j++)
{
if (array[i] > array[j])
{
swap(array, i, j);
exchange = 1;
}
}
}
}
int main(int argc, char *argv[])
{
int a[] = {22,44,33,88,66,11};
int len = sizeof(a) / sizeof(int);
print(a, len);
//SelectSort(a, len);
InsertSort(a, len);
//BubbleSort(a, len);
print(a, len);
system("PAUSE");
return 0;
}
不管是选择排序还是插入排序还是冒泡排序,时间复杂度都是O(n^2),
在一些对算法要求比较高的场合,就不是很适用,所以,后面我会继续写一些高效率的排序算法。