有n個整數,已經按照從小到大順序排列好,現在另外給一個整數m,請將該數插入到序列中,並使新的序列仍然有序。第二題誰能用c語言數組方法解決????


T2有很多方法

方法一

最懶的方法:把m放到最後面,排序(當然使用STL-sort)啦,輸出。

#include&
#include&
int array[102];
int n;//乾脆就不要變數m了,直接放到最後面
bool flag=1;//判斷是不是已經輸入了
int main()
{
scanf("%d",n);
for(int i=0;i&

嗯……什麼?不會STL?好吧 看第二種吧

優點:方便

缺點:效率低

方法二

最懶的方法的高效版:把m放到最後,由於前n個數字都是有序的,那就執行冒泡排序的一部分(第一個週期的交換),輸出。

自己做一個swap(為毛c啥函數都沒有???)

#include&
#include&
int array[102];
int n;//乾脆就不要變數m了,直接放到最後面
bool flag=1;//判斷是不是已經輸入了

void swap(int x,int y)
{
int t=x;x=y;y=t;
}

int main()
{
scanf("%d",n);
for(int i=0;i&=0;i--) if(array[i]&>array[i+1]) swap(array[i],array[i+1]);
for(int i=0;i&

方法三

最高效的方法

直接輸出,但是在適合的時機(位置)輸出m(array[n])

#include&
int array[102];
int n;//乾脆就不要變數m了,直接放到最後面
bool flag=1;//判斷是不是已經輸入了
int main()
{
scanf("%d",n);
for(int i=0;i&=array[n]) printf("%d ",array[n]),flag=0;
printf("%d ",array[i]);
}
return 0;
}

O(n)的喲(^U^)ノ~YO


將數組裡的數從後往前依次和m比,比m大的往後移一位,知道遇到比m小的就把m放那,自己畫個圖理解一下。


要插入的整數與數組已排列好的數比較一下,要插入的數在第幾,要重新申請數組,

將原來的數組和數拷貝到新數組。


基本的演算法題目

懶得寫


CSDN標準回答:請自主認真做好自己的作業。


已經懶得上百度找答案了嗎???


推薦閱讀:
相關文章