C代码
#include<stdio.h>
#include<stdlib.h>
//选择排序
/*将要排序的对象分作两部份,一个是已排序的,一个是未排序的,从后端未排序部份选择一个 最小值,并放入前端已排序部份的最后一个,例如: 10 7 11 4 8 4 | 7 11 10 8 选出最小4 4 7 | 11 10 8 选出最小7 4 7 8 |10 11 选出最小8 4 7 8 10 | 11 */
#define SWAP(x,y) {int temp;temp=x;x=y;y=temp;}
void selsort(int *num,int N)
{
int i,j;
//len=get_array_len(num);
for (i = 0; i < N-1; i++)
{
int min = i;
for (j = i+1; j < N; j++)
{
if (num[min] > num[j])
SWAP(num[min], num[j]);
}
}
for (i = 0; i < N; i++)
{
printf("%d ", num[i]);
}
}
//插入排序
/*像是玩朴克一样,我们将牌分作两堆,每次从后面一堆的牌抽出最前端的牌,然后插入前面一 堆牌的适当位置,例如: 10 7 11 4 8 7 10 | 11 4 8 7 10 11 | 4 8 4 7 10 11 | 8 4 7 8 10 11 */
void InsSort(int *num,int N)
{
int i,j;
for (i = 1; i < N; i++)
{
int temp = num[i];
for (j = i-1; j >= 0; j--)
{
if (num[i] > num[j])
{
for (int k = i - 1; k >= j+1; k--)
num[k + 1] = num[k];
num[j + 1] = temp;
break;
}
if (j == 0)
{
for (int k = i - 1; k >= 0; k--)
num[k + 1] = num[k];
num[j] = temp;
}
}
}
for (i = 0; i < N; i++)
{
printf("%d ", num[i]);
}
}
void InsSort_two(int *num, int N)
{
int i, j;
for (int i = 1; i < N; i++)
{
j = i - 1;
int temp = num[i];
while (temp < num[j])
{
num[j+1] = num[j];
j--;
if (j == -1)
break;
}
num[j+1] = temp;
}
for (i = 0; i < N; i++)
printf("%d ", num[i]);
}
//冒泡排序
/*顾名思义,就是排序时,最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法, 将大的元素交换至右端,所以大的元素会不断的往右移动,直到适当的位置为止。 如: 3 10 7 11 4 8 3 7 4 8 10 | 11 3 4 7 8 | 10 11 3 4 7 | 8 10 11 (可优化)*/
void bubsort(int num[], int N)
{
int i, j;
for (int i = 0; i < N - 1; i++)
{
for (j = 0; j < N - 1-i; j++)
if (num[j+1] < num[j])
SWAP(num[j+1], num[j]);
}
for (i = 0; i < N; i++)
printf("%d ", num[i]);
}
int main()
{
int num[10] = { 4,2,6,8,12,44,11,5,1,56 };
//printf("%d", sizeof(num)/sizeof(num[1]));
//InsSort(num,10);
//InsSort_two(num, 10);
bubsort(num,10);
system("pause");
return 0;
}