排序在代碼中用的非常普遍,所以今天我們來學下最基礎的三種排序,
如果你已經爛熟於心,請跳過本文。
注:我的代碼一般沒有註釋,我覺得沒啥必要,都是基礎挺簡單的。
#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),
在一些對算法要求比較高的場合,就不是很適用,所以,後面我會繼續寫一些高效率的排序算法。