當前位置:首頁 » 編程語言 » c語言插入排序

c語言插入排序

發布時間: 2022-02-15 18:31:21

『壹』 c語言插入排序法,哪位高人舉個例子,直接插入的那種

你手裡有一張牌,A,接起一張Q,插入手中,你發現Q比A小,把它放在了A前面。又接起一張K,你先發現K比Q大,然後又發現K比A小,把K放在A前面。
這里有3個插入動作。我來解釋一下
當插入第一個元素時,數組a[0]直接賦值A。因為不需要比

插入第二個時需要循環,從0到當前元素的個數··可寫一個getsize()的函數 一個一個去比較。如果手中的牌key比元素大時,用continue跳過,如果key比元素a[i]小,則a[i]後面的所有元素向後移一位把key放在原來a[i]的地方。

ok如果你的數組是動態分配的,那麼期間還需要使用realloc(size+1)的內存操作。插入成功後,size也要+1.說完了

『貳』 C語言使用插入法排序的問題

這個問題出在對插入排序的理解上,進行比較的元素是無序區的第一個,而不是每兩個之間進行比較.

/*問題應該是出在j循環這里,但不知如何改*/
for( j=i ; j>1 && e[j].ballot>e[j-1].ballot ; j-- ){
e[j]=e[j-1];
}
e[j]=e[0];
}
/*問題確實出在這里*/

其中,
e[j].ballot>e[j-1].ballot 改為
e[0].ballot>e[j-1].ballot 即可

『叄』 c語言中插入排序的基本思想是什麼

插入排序(Insertion sort)是一種簡單直觀且穩定的排序演算法。如果有一個已經有序的數據序列,要求在這個已經排好的數據序列中插入一個數,但要求插入後此數據序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據,演算法適用於少量數據的排序,時間復雜度為O(n^2)。是穩定的排序方法。插入演算法把要排序的數組分成兩部分:第一部分包含了這個數組的所有元素,但將最後一個元素除外(讓數組多一個空間才有插入的位置),而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步將一個待排序的記錄,按其關鍵碼值的大小插入前面已經排序的文件中適當位置上,直到全部插入完為止。

『肆』 C語言直接插入排序

#include<stdio.h>
#define max 4

void insert(int a[],int count)//從小到大排序
{
int i,j;
for(i=2;i<=count;i++)
if(a[i]<a[i-1])
{
a[0]=a[i];
a[i]=a[i-1];
for(j=i-2;a[0]<a[j];j--)
a[j+1]=a[j];
a[j+1]=a[0];//仔細分析排序過程
}
}

void main()
{
int i;
/*數組的開始下標是0,最大的是max-1,比如arr[5]的數組,下標是0,1,2,3,4*/
int a[max+1];//修改這句就可以了

for(i=1;i<=max;i++)
scanf("%d",&a[i]);
insert(a,max);
for(i=1;i<=max;i++)
printf("%d ",a[i]);
}

『伍』 C語言程序 插入排序法

#include<iostream>
using namespace std;
int main()
{
int s[23],c,d,p,i;
cout<<"輸入從小到大二十個數"<<endl;
for(int i=0;i<20;i++)
{
cin>>c;
s[i]=c;
}
for(i=0;i<3;i++)
{
cin>>d;
for(p=0;p<20+i;p++)
if(d<s[p])
break;
for(int q=19+i;q>=p;q--)
{
s[q+1]=s[q];
}
s[p]=d;
for(int p=0;p<21+i;p++)
{
printf("%d,",s[p]);
if(p==20+i)
printf("\b \n");
}
}
cin>>c;
}

『陸』 數組插入排序法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語言插入排序問題

#include<stdio.h>
#include<stdlib.h>

int main()
{
long long n,i,t,*arr,len=0;

scanf("%lld",&n);
arr=(long long*)calloc(n,sizeof(long long));
for(;n>0;n--)
{
scanf("%lld",&arr[len++]);
if(len>1&&arr[len-1]<arr[len-2])
{
t=arr[len-1];
for(i=len-2;i>=0&&arr[i]>t;i--)
arr[i+1]=arr[i];
arr[i+1]=t;
}
for(i=0;i<len-1;i++)
printf("%lld ",arr[i]);
printf("%lld\n",arr[len-1]);
}
free(arr);
return 0;
}

『捌』 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語言編程題--折半插入排序

又是數據結構的啊?

熱點內容
sql提示存儲過程 發布:2025-05-17 07:35:58 瀏覽:743
qq里的互動訪問 發布:2025-05-17 07:26:53 瀏覽:665
口語易賬號密碼發送到哪裡 發布:2025-05-17 07:26:52 瀏覽:62
核桃編程幼兒 發布:2025-05-17 07:26:50 瀏覽:786
2台伺服器集群搭建 發布:2025-05-17 07:18:57 瀏覽:185
北方園林配置植物有哪些 發布:2025-05-17 07:18:20 瀏覽:544
數控加工零件圖及編程 發布:2025-05-17 07:18:11 瀏覽:730
煉鋼鹼度演算法 發布:2025-05-17 07:17:26 瀏覽:14
python獲取年月日 發布:2025-05-17 07:15:33 瀏覽:303
手機加密軟體java 發布:2025-05-17 07:00:24 瀏覽:443