基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序
待排数组[6 2 4 1 5 9]
第一次比较奇数列,奇数列与它的邻居偶数列比较,如6和2比,4和1比,5和9比
[6 2 4 1 5 9]
交换后变成
[2 6 1 4 5 9]
第二次比较偶数列,即6和1比,4和5比
[2 6 1 4 5 9]
交换后变成
[2 1 6 4 5 9]
第三趟又是奇数列,选择的是2、6、5分别与它们的邻居列比较
[2 1 6 4 5 9]
交换后
[1 2 4 6 5 9]
第四趟偶数列
[1 2 4 6 5 9]
一次交换
[1 2 4 5 6 9]
- //Odd-even sort
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc,char *argv[])
- {
- int array[6]={6,2,4,1,5,9};
- int flag=1,temp,sign;
- //Odd-even sort
- while(flag!=0)
- {
- flag=0;
- //奇数列排序
- for(sign=0;sign<6;sign+=2)
- {
- if(array[sign]>array[sign+1])
- {
- temp=array[sign];
- array[sign]=array[sign+1];
- array[sign+1]=temp;
- flag=1;
- }
- }
- //偶数列排序
- for(sign=1;sign<6;sign+=2)
- {
- if(array[sign]>array[sign+1])
- {
- temp=array[sign];
- array[sign]=array[sign+1];
- array[sign+1]=temp;
- flag=1;
- }
- }
- //这两个for循环应该可以合成一个的,但是不知道怎么做
- }
- //输出排序后的数组
- for(sign=0;sign<6;sign++)
- {
- printf("%d",array[sign]);
- }
- return 0;
- }
引用:http://www.cnblogs.com/kkun/archive/2011/11/23/2260295.html
转载于:https://blog.51cto.com/wenryxu/1173320