参考:http://blog.jobbole.com/113863/
以冒泡法为例:
#include <iostream>
int sort_bubble(int *arr, int N);
int main()
{
int arr[7] = { 32,17,2,-1,6,100,24 };
int N = 7;
for (int i = 0; i < N; i++)
printf("%d ", arr[i]); printf("\n\n");
sort_bubble(arr, N);
printf("\n\n");
for (int i = 0; i < N; i++)
printf("%d ", arr[i]);
getchar();
return 0;
}
int sort_bubble(int *arr, int N)
{
for (int j = 0; j < N - 1; j++) // 当前和后一个比较,要-1; //
{
for (int i = 0; i < N - 1 - j; i++)
{
if (arr[i] > arr[i + 1])
{
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
printf("[ j=%d i=%d ] ", j, i);
for (int k = 0; k < N; k++)
printf("%d ", arr[k]);
printf("\n");
}
}
}
return arr[N];
}
//https://blog.csdn.net/ysunflower/article/details/80425788 冒泡
int main()
{
int o = 0;
int arr[5] = { 5,9,-2,3,7 };
for (int j = 0; j < 5 - 1; j++)
{
for (int i = 0; i < 5 - 1 - j; i++) // 已经排过序的后几位不再比较。
{
if (arr[i] > arr[i + 1])
{
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
o++;
}
}
}
for (int k = 0; k < 5; k++)
printf("%d ", arr[k]);
printf("\no=%d", o);
getchar();
}
选择排序
//相比冒泡的每次都交换顺序,这个把本轮起始作为最值,遍历比较找到最值才,记录这个最小值位置,把本轮起始位和最小值互换。
int main()
{
int arr[7] = { -22,6,-1,9,4,12,7 };
int min;
int minloc;
for (int j = 0; j < 7; j++)
{
min = arr[j];
minloc = j;
for (int i = j; i < 7 - 1; i++)
{
if (arr[i + 1] < min)
{
min = arr[i + 1];
minloc = i + 1;
}
}
int tempt = arr[j];
arr[j] = min;
arr[minloc] = tempt;
}
for (int k = 0; k < 7; k++)
printf(" %d", arr[k]);
getchar();
}