Ⅰ 數組插入排序法c語言
外循環寫的不對,內循環也是錯了。首先外循環要從0開始,直到8就可以結束了。內循環從i +1開始,到9就可以結束了,所以外循環應該這樣寫:for (i=0;i<9;i++),內循環為:for (j=i+1;j<10;j++)。外循環從第一個數也就是a[0]開始,依次和後面的每一個數進行比較,所以內循環從i +1開始,直到最後一個數為止,這樣就能保證第一個數為最大的。然後再開始第二個數,以此類推。等到外循環到a [8]也就是倒數第二個數時,內循環就執行一次,所有的數就能夠比較完了,所以沒必要再進行最後一個數了。
Ⅱ C語言如何輸入十個數,按從大到小順序排列!
用選擇排序法編寫c語言,實現從鍵盤上輸入10個數,按從大到小的順序排序輸出。代碼如下:
#include<stdio.h>
int main()
{
int i,j,a[10],t;
printf("輸入數");
for (i = 0; i < 10; i++)
scanf("%d",&a[i]);
for (i = 0; i < 10; i++)
{
for (j = i + 1; j < 10;j++)
if (a[i] < a[j]){
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
printf("從大到小");
for (i = 0; i < 10; i++)
printf("%2d", a[i]);
return 0;
}
(2)數字插入排序c語言擴展閱讀:
代碼還可以設計,如下:
#include<stdio.h>
int main()
{
int a[10],i,j,t;//定義數組;
for(i=0;i<10;i++){
scanf("%d",&a[i]);//給數組賦值;
}
for(i=0;i<9;i++)//10個數,進行9輪比較;
for(j=0;j<10-i;j++){//第一個數比較9次,依次遞減;
if(a[j]>a[j+1]) {//交換值;
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(i=0;i<10;i++){
printf("%d ",a[i]);//輸出數組的值;
}
return 0;
}
}
printf("the sorted numbers: ");
for(i=0;i<10;i++)
printf(" %d",a[i]);
printf(" ");
}
Ⅲ C語言的插入排序法是什麼
插入排序(insertion sort)
如果需要對一個小型數組進行升序排列,那麼可以選用插入排序,插入排序可以用打牌時對摸起的牌根據牌的點數來對其進行插入排列來描述。
可以把左手中的牌比做已經摸起的牌,即已經被排列好的牌,左手可以容納的牌數的空間可以假想為和要摸的牌的總數相同;而在桌子上的那部分沒摸的牌則是未被排序的牌,這二者的關系可以抽象為數組中已經被排序好的部分和未被排序好的部分。
一開始摸起的第一張牌不需要排序,可以認定其為已排序的牌。
如果用外層循環for來表示摸起的牌的話,則可以抽象為:
// 對象數組
// 桌子上的牌
int A[] = {5,1,3,6,2,4};
// 從數組的第二個元素開始抽取
for(int i = 1; i < sizeof A/sizeof A[0]; ++i)
{
int pick = A[i]; // 被摸起的牌
int j = i - 1; // j記錄已排序部分的最後一張牌的位置
. . .
}
而後摸起的排要根據排列策略和先前摸起的牌的點數的大小來確定其插入的合適位置,這里示範的排列策略是升序排列,摸起了這張牌後,便自右向左地和手中的牌進行比較。
把pick稱作摸起的牌,如果pick比手中的牌小,則手中較大的那張牌就向右挪一位,pick再和下一張牌做比較,如果下一張牌仍然比pick大,那麼那張牌便也向右移動一個位置,依此類推。
如果手中下一張和pick比較的牌比pick小,那麼pick就被插入在了手中前一張牌移動後空下的位置;
或者手中所有的牌都比pick大,那麼所有的牌就都向右移動過一個位置,所以pick最終被插入在了手中最左邊的位置。
這個過程可以抽象為:
// 對象數組
// 桌子上的牌
int A[] = {5,1,3,6,2,4};
// 從數組的第二個元素開始抽取
for(int i = 1; i < sizeof A/sizeof A[0]; ++i)
{
int pick = A[i]; // 被摸起的牌
int j = i - 1; // j記錄已排序部分的最後一張牌的位置
// 如果循環了j+1次,即j = -1時還未找到比pick小的牌
// 那麼pick就是最小的牌被插入在位置A[0]處
// A[j]是當前手中和pick進行比較的牌
while(j >= 0 && A[j] > pick)
{
// 未找到可插入位置,則A[j]向後挪一位
A[j+1] = A[j];
// j減1繼續向左定位手中下一張供和pick比較的牌--j;
}
// while結束後,j+1所表達的位置便是pick可以插入的位置
A[j+1] = pick;
}
// 對於有N個元素的數組A,採用插入排序法排序時,當外層循環進行了N-1次後排序完畢
Ⅳ c語言中插入排序的基本思想是什麼
插入排序(Insertion sort)是一種簡單直觀且穩定的排序演算法。如果有一個已經有序的數據序列,要求在這個已經排好的數據序列中插入一個數,但要求插入後此數據序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據,演算法適用於少量數據的排序,時間復雜度為O(n^2)。是穩定的排序方法。插入演算法把要排序的數組分成兩部分:第一部分包含了這個數組的所有元素,但將最後一個元素除外(讓數組多一個空間才有插入的位置),而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步將一個待排序的記錄,按其關鍵碼值的大小插入前面已經排序的文件中適當位置上,直到全部插入完為止。
Ⅳ C語言編程 排序並插入
寫個樣例給你看看吧
#include<stdio.h>
intmain()
{
intn,a[11],i,j,t,v;
//scanf("%d",&n);
scanf("%d",&a[0]);//輸入第一個數
for(i=1;i<9;++i){//剩下的八個
scanf(",%d",&a[i]);
}
n=9;
for(i=0;i<n;++i){//選擇排序
t=i;
for(j=i+1;j<n;++j){
if(a[t]>a[j])t=j;
}
if(t!=i){
v=a[t],a[t]=a[i],a[i]=v;
}
}
scanf("%d",&v);//要插入的數
for(i=n-1;i>=0;--i){
if(a[i]>v){
a[i+1]=a[i];
}
elsebreak;
}
++i;//插入位置
a[i]=v;
n++;
for(i=0;i<n;++i){//輸出
if(i==0)printf("%d",a[i]);
elseprintf(",%d",a[i]);
}
printf(" ");
return0;
}