當前位置:首頁 » 編程語言 » 插入排序c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

插入排序c語言

發布時間: 2022-01-14 11:03:14

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

t=i;;
for(;i<9;i++);

這兩行多了 分號

呵呵

a[t]=num; 這個插入以後,應該退出循環,要加 break

見程序


一個重大的錯誤,嵌套的內外循環 用同一個變數,奇特!

怎麼能這樣?

❸ 數據結構c語言直接插入排序代碼

插入排序就類似摸牌理牌的過程。每摸一個數,將其插入前面已排好的序列中。用數組實現即可。
下面我寫出主要代碼:
for(i=2;i<=N;i++) //這里我不用數組零空間,用來插的數據,插完第二個接著插第三個

{ //第一個數本來就有序,所以不用插了
key=a[i]; //把要插的數先保存起來,因為待會兒你插在前面時,元素要後移,會將其覆蓋
for(j=i-1;j>0;j--) //你插第i個元素,說明前1到i-1個元素都排好了。
{
if(key>a[j]) //從有序序列中最後的元素比較,這里我用從小到大排序
{ //上面說明插入位置應該是第j+1個。
for(k=i-1;k>=j-1;k--) //後移操作。
a[k+1]=a[k];

}
a[j+1]=key; //插入

}

上面是基本思想,更標準的代碼,你可以網路查查。

❹ C語言編程插入法排序

演算法描述
一般來說,插入排序都採用in-place在數組上實現。具體演算法描述如下:
從第一個元素開始,該元素可以認為已經被排序
取出下一個元素,在已經排序的元素序列中從後向前掃描
如果該元素(已排序)大於新元素,將該元素移到下一位置
重復步驟3,直到找到已排序的元素小於或者等於新元素的位置
將新元素插入到該位置後
重復步驟2~5
如果比較操作的代價比交換操作大的話,可以採用二分查找法來減少比較操作的數目。該演算法可以認為是插入排序的一個變種,稱為二分查找排序。
范常式式碼
void insertion_sort(int array[], int first, int last)
{
int i,j;
int temp;
for (i = first+1; i<=last;i++)
{
temp = array[i];
j=i-1;

while((j>=first) && (array[j] > temp))
{
array[j+1] = array[j];
j--;
}
array[j+1] = temp;
}
}

❺ 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語言中插入排序的基本思想是什麼

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

❼ C語言插入排序由小到大的代碼

C語言插入排序由小到大的代碼如下:

int main()

{

int a[10];

int i,j,temp=0;

int k,x=0;

printf("輸入10個數: ");

for(i=0;i<10;i++)scanf("%d",&a[i]);

for(i=0;i<9;i++)

{

k = i;

for(j=i+1;j<10;j++)

if(a[j]<a[i])

k = j;

temp=a[i];

a[i]=a[k];

a[k]=temp;

}

printf("排序後: ");

for(i=0;i<10;i++)

printf("%d ",a[i]);

getchar();getchar();

}

(7)插入排序c語言擴展閱讀:

數學函數

所在函數庫為math.h、stdio.h、string.h、float.h

int abs(int i) 返回整型參數i的絕對值

double cabs(struct complex znum) 返回復數znum的絕對值

double fabs(double x) 返回雙精度參數x的絕對值

long labs(long n) 返回長整型參數n的絕對值

double exp(double x) 返回指數函數ex的值

doublefrexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中

doubleldexp(double value,int exp); 返回value*2exp的值

double log(double x) 返回logex的值

double log10(double x) 返回log10x的值

double pow(double x,double y) 返回x^y的值

doublepow10(int p) 返回10^p的值

double sqrt(double x) 返回+√x的值

❽ 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語言插入排序問題

#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語言插入排序法

你拿幾個數模擬一下就看到了。whille里的循環是負責每趟將最小的數排到它該在的位置,即第i趟循環是保證從0到i的元素單調增排列。temp是用來記錄當前i中的元素,有可能while執行一次a[i]處就有了新元素,值就改變了,然而temp還要繼續和前面的比較看看是不是仍要往前插入,這個循環一直是while在做