程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言實現數組的奇偶排序

C語言實現數組的奇偶排序

編輯:關於C
今天遇到了個實現數組的奇偶排序的問題,與大家分享下解決思路。     思路1:創建新的數組對所求數組進行遍歷,技術放在一起偶數放在一起,再用穿件數組中的內容替換到所求數組中,代碼如下:  
#define LEN 10
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[LEN] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };//數組的初始化
int odd[LEN] = { 0 };//用來存儲奇數
int dou[LEN] = { 0 };//用來存儲偶數
int j = 0;
int k = 0;
for (int i = 0; i < LEN; i++)
{
if (arr[i] % 2)
{
odd[j] = arr[i];
j++;
}
else
{
dou[k] = arr[i];
k++;
}
}
for (int i = 0; i < LEN; i++)//對目標數組的更改
{
if (i <= j)
{
arr[i] = odd[i];
}
else
{
arr[i] = dou[i - j - 1];
}
}
for (int i = 0; i < LEN; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}

 

    思路2:如果不允許創建新的空間變量怎麼辦呢,我們可以用冒泡排序的思想來解決這個問題,如果這個數是奇數,我們就把它冒泡的數組頂端,依次冒泡下去,我們就能得到答案,實現代碼如下:
#include<stdio.h>
int* doubleline(int *a, int size)//冒泡排序實現奇偶排序所封裝的函數
{
int i = 0;
for (i = 0; i < size; i++)//冒泡過程
{
for (int j = 0; j < size - i - 1; j++)
{
if ((*(a + j) % 2)==0)
{
int tmp = *(a + j);
*(a + j) = *(a + j + 1);
*(a + j + 1) = tmp;
}
}
}
return a;
}
int main()//調試過程
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int size = sizeof(arr) / sizeof(int);//求取數組大小
int *p = doubleline(arr, size);
for (int i = 0; i < size; i++)
{
printf("%d ",*(p+i));
}
system("pause");
return 0;
}

 

    個人認為冒泡排序雖然節省了空間,但是如果數組特別大的時候這樣做的效率是極其低下的,希望運用的時候斟酌下。 如有什麼不足之處,希望批評指正。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved