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

c語言整型數組設計排序演算法

發布時間: 2022-03-03 23:28:53

❶ 設計c語言程序,用一維數組輸入N個整數,將這n個整數按從大到小排列

給你看看C語言的三種排序方法吧,這是我們老師給總結的,你看懂後就自己在寫這個程序吧!

一、冒泡法(起泡法)
演算法要求:用起泡法對10個整數按升序排序。
演算法分析:如果有n個數,則要進行n-1趟比較。在第1趟比較中要進行n-1次相鄰元素的兩兩比較,在第j趟比較中要進行n-j次兩兩比較。比較的順序從前往後,經過一趟比較後,將最值沉底(換到最後一個元素位置),最大值沉底為升序,最小值沉底為降序。
演算法源代碼:
# include <stdio.h>
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
/*輸入源數據*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);
/*排序*/
for(j=0;j<9;j++) /*外循環控制排序趟數,n個數排n-1趟*/
for(i=0;i<9-j;i++) /*內循環每趟比較的次數,第j趟比較n-j次*/
if(a[i]>a[i+1]) /*相鄰元素比較,逆序則交換*/
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
/*輸出排序結果*/
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
演算法特點:相鄰元素兩兩比較,每趟將最值沉底即可確定一個數在結果的位置,確定元素位置的順序是從後往前,其餘元素可能作相對位置的調整。可以進行升序或降序排序。
二、選擇法
演算法要求:用選擇法對10個整數按降序排序。
演算法分析:每趟選出一個最值和無序序列的第一個數交換,n個數共選n-1趟。第i趟假設i為最值下標,然後將最值和i+1至最後一個數比較,找出最值的下標,若最值下標不為初設值,則將最值元素和下標為i的元素交換。
演算法源代碼:
# include <stdio.h>
main()
{
int a[10],i,j,k,t,n=10;
printf("Please input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /*外循環控制趟數,n個數選n-1趟*/
{
k=i; /*假設當前趟的第一個數為最值,記在k中 */
for(j=i+1;j<n;j++) /*從下一個數到最後一個數之間找最值*/
if(a[k]<a[j]) /*若其後有比最值更大的*/
k=j; /*則將其下標記在k中*/
if(k!=i) /*若k不為最初的i值,說明在其後找到比其更大的數*/
{ t=a[k]; a[k]=a[i]; a[i]=t; } /*則交換最值和當前序列的第一個數*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
演算法特點:每趟是選出一個最值確定其在結果序列中的位置,確定元素的位置是從前往後,而每趟最多進行一次交換,其餘元素的相對位置不變。可進行降序排序或升序排序。
三、插入法
演算法要求:用插入排序法對10個整數進行降序排序。
演算法分析:將序列分為有序序列和無序列,依次從無序序列中取出元素值插入到有序序列的合適位置。初始是有序序列中只有第一個數,其餘n-1個數組成無序序列,則n個數需進n-1次插入。尋找在有序序列中插入位置可以從有序序列的最後一個數往前找,在未找到插入點之前可以同時向後移動元素,為插入元素准備空間。
演算法源代碼:
# include <stdio.h>
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++) /*外循環控制趟數,n個數從第2個數開始到最後共進行n-1次插入*/
{
t=a[i]; /*將待插入數暫存於變數t中*/
for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*在有序序列(下標0 ~ i-1)中尋找插入位置*/
a[j+1]=a[j]; /*若未找到插入位置,則當前元素後移一個位置*/
a[j+1]=t; /*找到插入位置,完成插入*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
演算法特點:每趟從無序序列中取出第一個數插入到有序序列的合適位置,元素的最終位置在最後一趟插入後才能確定位置。也可是先用循環查找插入位置(可從前往後或從後往前),再將插入位置之後的元素(有序列中)逐個後移一個位置,最後完成插入。該演算法的特點是在尋找插入位置的同時完成元素的移動。因為元素的移動必須從後往前,則可將兩個操作結合在一起完成,提高演算法效率。仍可進行升序或降序排序。

這應該會對你很有用的,好好學,把它弄懂!祝你好運!

❷ C語言程序設計,數組演算法的實例,使用改進了的選擇排序法進行排序

#include <stdio.h>
int main( )
{
int a[ 4 ], i, j, k, tmp;
printf("請輸入4個數:");
for ( i = 0; i < 4; i++ )
scanf("%d", &a[ i ]);
for ( i = 0; i < 4; i++ )
{

k = i;
for ( j = i + 1; j < 4; j++ )
if ( a[ k ] > a[ j ] ) k = j;
tmp = a[ k ];
a[ k ] = a[ i ];
a[ i ] = tmp;
}
for ( i = 0; i < 4; i++ )
printf("%d ", a[ i ]);
return 0;
}

❸ 求C語言將數組元素大小排序!!

C語言將數組元素大小排序方法:

以下使用的是冒泡排序法實線數組從小到大排序。

思想:每次相鄰兩個數比較,若升序,則將大的數放到後面,一次循環過後,就會將最大的數放在最後。

10、2、3、4、5、6、9、8、7、1是輸入的待排序的數列,經過第一次排序,將最大的,10放在最後,第二次排序,將剩下的2、3、4、5、6、9、8、7、1進行冒泡,將當前最大的9放在倒數第二的位置,以此類推。

以下是具體代碼:

#include <stdio.h>

int main(){

int nums[10] = {10, 2, 3, 4, 5, 6, 9, 8, 7, 1};

int i, j, temp, isSorted;

//優化演算法:最多進行 n-1 輪比較

for(i=0; i<10-1; i++){

isSorted = 1; //假設剩下的元素已經排序好了

for(j=0; j<10-1-i; j++){

if(nums[j] > nums[j+1]){

temp = nums[j];

nums[j] = nums[j+1];

nums[j+1] = temp;

isSorted = 0; //一旦需要交換數組元素,就說明剩下的元素沒有排序好

}

}

if(isSorted) break; //如果沒有發生交換,說明剩下的元素已經排序好了

}

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

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

}

printf(" ");

return 0;

}

(3)c語言整型數組設計排序演算法擴展閱讀:

其他將數組從小到大排序的演算法

以下使用的是選擇排序法實現數組從小到大排序。

思想:從第一個數開始,每次和後面剩餘的數進行比較,若升序,則如果後邊的數比當前數字小,進行交換,和後面的所有的數比較、交換後,就會將當前的最小值放在當前的位置

輸入的序列為10、2、3、4、5、6、9、8、7、1進行一次排序後將最小的數放在了第一位(a[0]與它後面的所有數進行比較,若a[0]比後面的數大,進行交換),以此類推。

以下是具體代碼:

#include <stdio.h>

int main(void){

int a[1001];

int n,i,j,t;

scanf("%d",&n);//n為要排序的數的個數

//輸入需要排序的數

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

scanf("%d",a+i);

//接下來進行排序

for(i=0;i<n-1;++i)//因為每次需要和a[i]後面的數進行比較,所以到a[n-2](倒數第2個元素)就行

{

for(j=i+1;j<n;++j)//j從i後一個開始,a[i]與a[j]進行比較

{

if(a[i]>a[j])//a[i]為當前值,若是比後面的a[j]大,進行交換

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}//每排序一次,就會將a[i](包括a[i])之後的最小值放在a[i]的位置

for(j=0;j<n;++j)

printf("%-5d",a[j]);

printf(" ");

}

return 0;

}

❹ c語言中,用一維數組排序十個整數,怎麼做

需要准備的材料分別有:電腦、C語言編譯器。

1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。

❺ C語言作業:編寫程序實現整型數組的排序

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

#define shengxu 0

void RandonArray(int a[],int n)
{
int i;

srand(time(NULL));
for(i=0;i<n;i++)
{
a[i]=rand();
}
}
void SortArray(int a[],int n)
{
int i,j,t;

for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(shengxu)
{
if(a[j]>a[j+1])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
else
{
if(a[j]<a[j+1])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
}
}
void OutputArray(int a[],int n)
{
int i;

for(i=0;i<n;i++)
{
printf("%d,",a[i]);
}
}
int main()
{
int i,n,*a;
char msg[]={-56,-25,-71,-5,-78,-55,-60,-55,-93,-84,-57,-21,-72,-8,-50,
-46,50,48,48,-78,-58,-72,-69,-93,-95,0};
printf("%s\n\n",msg);
printf("請輸入要隨機產生的數組的元素個數:");
scanf("%d",&n);
a=(int*)calloc(n,sizeof(int));
RandonArray(a,n);
printf("%s排序前數組各元素的值是:\n",shengxu ? "升序" : "降序");
OutputArray(a,n);
SortArray(a,n);
printf("\n%s排序後數組各元素的值是:\n",shengxu ? "升序" : "降序");
OutputArray(a,n);
free(a);
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}

❻ C語言. .編寫一個Sort函數,完成對整型數組元素升序排列。

#include<stdio.h>

voidsort(inta[],intn){//選擇排序
inti,j,k,t;
for(i=0;i<n-1;++i){
k=i;
for(j=k+1;j<n;++j){
if(a[k]>a[j])k=j;
}
if(k!=i){
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}

intmain(){
inta[]={21,16,30,21,8,19,33,26,28,27,24,50,13,12};
inti,n=sizeof(a)/sizeof(a[0]);
printf("排序前: ");
for(i=0;i<n;++i)
printf("%d",a[i]);
printf(" ");
sort(a,n);
printf("排序後: ");
for(i=0;i<n;++i)
printf("%d",a[i]);
printf(" ");
return0;
}

❼ 用C語言 對一個整形數組設計一個排序演算法

要求提不清楚?

❽ C語言數組排序方法

選擇排序的原理是,每次從待排序數字中挑選出最大(最小)數字,放在有序序列的末尾。實際操作中,只需要在這個數組中將挑出來的數字與前面的數字交換即可。例如:4
1 5
2 3找到最小的1,1和4交換1
4 5
2
3找到最小的2,2和4交換1
2
5
4
3找到最小的3,3和5交換1
2
3
4
5找到最小的4,4和4交換(不交換也可)可見,選擇排序需要一個雙重循環來完成,因此它的復雜度是O(n^2)在數據量比較大時,不建議使用這種排序方法。 其他排序方法有很多,你甚至可以自己根據不同數據規模設計不同的排序方法。比較常見的有冒泡排序,插入排序(這兩種和選擇排序一樣,都是O(n^2)),二分法插入排序(降低了一些復雜度,但是涉及到大規模數據移動,效率依然不高),快速排序(平均復雜度O(nlogn),但是不穩定,最壞情況O(n^2)),隨機化快速排序(很大程度上避免了最壞情況的出現),堆排序(O(nlogn),編程復雜度高),基數排序(理論復雜度O(n),實際要比這個慢。甚至能應付字元串排序,但是編程復雜度高,牽扯到其他數據結構),桶排序(O(n),編程簡單,效率高,但是應付的數據范圍不能太大,受到內存大小的限制)。 平時比較常用的就是快速排序,程序簡單,效率也可以接受。 這是我了解的一些東西,希望對你有幫助。

❾ C語言中怎樣實現將數組中的整數進行升序排列

可以。。 #include "stdio.h"
void main()
{int a[10],i,j,t;

printf("enter 10 Z_nums:\n"); //提示輸入10個整數
for(i=0;i<10;i++)
scanf("%d",&a[i]);

for(i=0;i<9;i++) //冒泡排序排列10個整數
for(j=0;j<10-i;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;} printf("The sorted nums:\n");
for(i=0;i<10;i++) //輸出排序後的10個整數
printf("%d ",a[i]);
printf("\n");
}

❿ 用C語言寫一個子函數完成對一整型數組從大到小的排序

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

int main()
{
void sort(int x[],int n);
int *p,i;
int N;
printf("please input the total num:");
scanf("%d",&N);
int a[N];
printf("please input the %d num:\n",N);
p=a;
for(i=0;i<N;i++)
scanf("%d",p++);
p=a;
sort(p,N);
for(p=a,i=0;i<N;i++)
{printf("%d ",*p);p++;}
system("pause");
}

void sort(int x[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(x[j]<x[k])
k=j;
if(k!=i)
{t=x[i];x[i]=x[k];x[k]=t;}
}
}