Re: [問題] 有關於動態記憶體配置
看板C_and_CPP (C/C++)作者loveme00835 (最愛朴素妍)時間15年前 (2010/10/02 12:10)推噓2(2推 0噓 5→)留言7則, 2人參與討論串3/3 (看更多)
※ 引述《kitconan (不再在乎)》之銘言:
: 各位前輩好,小弟想寫一支程式是由user決定array大小和裡面的元素,並進行排列
: 程式碼如下
: #include<stdio.h>
: #include<stdlib.h>
: int size=0;
: int *num,*ans;
: int aa=0;
: int ii=0;
: int jj=0;
: int i=0;
: int j=0;
: int cond=1;
: int flag=0;
: int n=0;
: void cre_num(void);
: void change(k){
↑ 沒有給型態
: flag++;
: aa=num[k-1];
: num[k-1]=num[k];
: num[k]=aa;
: }
: void sort(int len){
: for(i=1;i<=len;i++){
: if (num[i]<num[i-1]) {
: change(i);
: for(j=(i-1);j>=0;j--){
: if(num[j]<num[j-1]) change(j);
: if(num[j-1]>num[j-2]) break;
: }
: }
: }
: }
這應該是插入排序法吧? 為了跟其他函式讓行為一致, 外面
的 for迴圈應改成 :
for(i=1;i<=(len-1);i++)
這樣才不會存取違規, 內層迴圈因為兩個 if 都是在做交換
的事情, 一個是多餘的可以拿掉, break 也可以跟 for寫在
一塊, j 要注意不可以小於 1, 最後程式碼變成這樣 :
void sort(int len){
for(i=1;i<=(len-1);i++)
for(j=i;j>=1 && num[j] < num[j-1];j--)
change(j);
}
i 為要插入項的索引, j 的初始值當然是 i, 然後一直往左
跑直到比完為止, 或是已經換到適當的位置 (大於前面那一
項)
: void print_ans(int len);
: void print_num(int len);
: int main(){
: cre_num();
: ans=(int*)realloc(num,size*sizeof(int));
↑realloc 重配置同樣大的記憶體是沒有效果的, 直
接 ans = num 即可
: sort(size);
: printf("series is\n");
: print_num(size);
: printf("\n");
: printf("answer is\n");
: print_ans(size);
: printf("\n");
: printf("資料交換%d次\n",flag);
free(num);
: system("pause");
: return 0;
: }
--
◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去
████◤ ██ ◢██◣█ ██ ████ ██ s ~> T-ara
█/███ ██ ██ ██ █/█ ◢███ █/█ 歡迎您的光臨
████◤ ██ ██ ██ ██◤ ███◤ ██◤ 恩靜、智妍、孝敏
█/███ ██ █/██◤ ██ █/██ ██ 素妍、居麗、寶藍
████◤ █◤ ◥██◤ █◤ ████◤█◤ ψmakigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835 來自: 140.121.197.115 (10/02 12:17)
推
10/02 12:44, , 1F
10/02 12:44, 1F
→
10/02 23:04, , 2F
10/02 23:04, 2F
→
10/02 23:04, , 3F
10/02 23:04, 3F
→
10/02 23:04, , 4F
10/02 23:04, 4F
→
10/02 23:05, , 5F
10/02 23:05, 5F
→
10/02 23:05, , 6F
10/02 23:05, 6F
推
10/03 03:10, , 7F
10/03 03:10, 7F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
2
11
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章