第一种:冒泡排序
//冒泡排序且不输出
//每一趟确定a[loc]的值
void bubbleSort(int a[], int size)
{
int temp, loc, i;
for (loc = size - 1; loc >= 1; loc--)
{
for (i = 0; i < loc; i++)
{
if (a[i]> a[i + 1])//若为降序,则只改变此处的‘>’为‘<’
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
}
/*冒泡排序算法2:升序排序,以pass作为循环控制变量*/
void bubbleSortDown2(int a[],int size)
{
int pass,i,temp;
/*总共需要比较size-1趟。每一趟确定a[size-pass]的值*/
for(pass=1;pass<=size-1;pass++){
/*从下标为0~size-pass数组元素中依次进行比较交换*/
for(i=0;i<=size-pass-1;i++)
if(a[i]>a[i+1]){ /*交换*/
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
第二种:选择排序
/* 函数功能:选择排序(降序)
参数说明:数组,数组中已有元素个数*/
void selectSortDown(int data[], int elementCount)
{
int i, maxLoc, temp;
for (i = 0; i <= elementCount - 2; i++)
{
maxLoc = findMax(data, i, elementCount - 1);
if (i != maxLoc)
{
temp = data[i];
data[i] = data[maxLoc];
data[maxLoc] = temp;
}
}
}
/* 函数功能:找数组中的最大值元素,并返回其下标
参数说明:数组名,查找起始位置下标,查找终止位置下标*/
int findMax(int data[], int startLoc, int endLoc)
{
int i, maxloc;
maxloc = startLoc;
for (i = startLoc + 1; i <= endLoc; i++)
if (data[i] > data[maxloc])//若要改为升序,更改此处的不等号即可!
maxloc = i;
return maxloc;
}
第三种:插入排序
void insertSort(int a[],int n)
{
int temp,j,i;
for(i=1;i<n;i++)
{
j=i-1;
if(a[j]>a[i])//当前面元素大于后面元素时
{
temp=a[i];//将当前元素存为temp,逐一与前一元素比较
a[i]=a[j];
while(a[j-1]>temp)
{
a[j]=a[j-1];
j--;
}
a[j]=temp;
}
}
}