///////////////////////////////////////////////////////////////////////////////
// 冒泡法排序
// 原理(由小到大):
// 将相邻两个数比较,将大的调到后头。如果有n个数,则要进行n-1趟比较。
// 在第1趟中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。
///////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
void bubbleSort(int a[],int n)
{
for(int j=0; j<n-1; j++)
{
for(int i=0; i<n-1-j; i++)
{
if(a[i] > a[i+1])
{
a[i]= a[i] ^ a[i+1];
a[i+1] = a[i] ^ a[i+1];
a[i]= a[i] ^ a[i+1];
}
}
}
}
int main (int argc,constchar * argv[])
{
int a[5] = {5,4,3,2,1};
bubbleSort(a,5);
for (int i=0; i<5; i++)
{
printf("%d ", a[i]);
}
return0;
}
输出结果:
Running…
1 2 3 4 5
Debugger stopped.
2 选择法排序
////////////////////////////////////////////////////////////////////////////////////
// 选择法排序
// 原理(由小到大):
// 先将n个数中最小的数与a[0]对换,再将a[1]到a[n-1]中最小的数与a[1]对换
// ……每比较一轮,找出未经排序的数中最小的一个。共比较n-1轮。
////////////////////////////////////////////////////////////////////////////////////
#include<stdio.h>
void sort(int array[],int n)
{
int i,j,min;
for(i=0;i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
{
if(array[j]<array[min])
{
min=j;
}
}
if(min != i)
{
array[min]= array[min] ^ array[i];
array[i]= array[min] ^ array[i];
array[min]= array[min] ^ array[i];
}
}
}
int main()
{
int a[10],i;
printf("Enter the array:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
sort(a,10);
printf("The sorted array:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return0;
}
运行结果:
Enter the array:
9 8 7 6 5 4 3 2 1 0
The sorted array:
0 1 2 3 4 5 6 7 8 9