// 冒泡排序之升序排序
/*
假设有N个数,那么相邻的2个数就有N-1对,依次比较N-1对的大小即可把最大的元素放到最后(相邻的
两个元素比较,如果第一个比第二个大,就交换他们两个),此时最后一个元素已经是最大了,那么还
有N-1个数需要排列,此时需要比较的相邻2个数有N-2对,一次比较剩下的N-2对的大小即可把第二大的
元素放到倒数第二位置,以此类推....
示例代码排列过程
51 56 24 12
51 24 56 12
51 24 12 56
24 51 12 56
24 12 51 56
12 24 51 56
*/
#include<stdio.h>
#define kLength 4 //定义数组长度
int main()
{
int number[4]={56,51,24,12};
int i,j,temp;
for(j=0;j<kLength -1;j++)
for(i=0;i<kLength -1-j;i++)
{
if(a[i]>a[i+1])//数组元素大小按升序排列
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
for(i=0;i<kLength ;i++)
{
printf("%d",number[i]);
}
printf("\n");
return 0;
}
// 简单选择排序
第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]
中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将
它与r[i]交换,使有序序列不断增长直到全部排序完毕
/*示例代码排列过程:
index初始值0 循环判断(从元素下标1到3遍历)最小记录后index=3 if ( index!=i) 成立,进行
交换 数组经过排序后 12 51 24 56
index初始值1 循环判断(从元素下标2到3遍历)最小记录后index=2 if ( index!=i) 成立,进行
交换 数组经过排序后还是 12 24 51 56(已经排序完毕,但是程序任然往下执行)
index初始值2 循环判断(从元素下标3到3遍历)最小记录后index=2 if ( index!=i) 不成立,不
进行交换 ,此时排序完毕 数组经过排序后12 51 24 56
*/
#include<stdio.h>
#define kLength 4 //定义数组长度
int main()
{
int number[4]={56,51,24,12};
int i,j,temp;
for ( i=0 ; i< kLength -1 ; i++) //n-1趟排序
{
int index=i; //假设index是最小值记录的位置
for ( j=i+1 ; j < kLength ; j++) //查找最小记录的位置
if (number[j]< number[index] ){
index=j;
}
if ( index!=i) //若无序区第一个元素不是无序区中最小元素,则进行交换
{ temp= r[i]; r[i]= r[index]; r[index]=temp; } //利用temp作为临时空间,两个值交
换的桥梁
}
return 0;
}
|
|