當前位置:首頁 » 編程語言 » 數組排序c語言數組

數組排序c語言數組

發布時間: 2023-04-05 06:47:24

⑴ 求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;

}

(1)數組排序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語言中怎麼對數組隨機排序

可以用一個輔助數組進行隨機排序,方法如下:

1 獲取要排序的數組長度L。
2 定義整型的輔助數組,長度為L。
3 生成L個隨機整型數字,存與輔助數組中,這樣要排序數組和輔助數組就是一一對應的了。
4 對輔助數組排序,排序過程中,當改變輔助數組中數字的位置時,同步改變要隨機排序的原數組中對應的元素位置。比如為排序交換輔助數組的第三個和第五個元素,那麼就要同時交換原數組中的第三個和第五個元素。
5 當輔助數組排序完成後,原數組中的值就是隨機順序了。
6 刪除輔助數組。

⑶ C語言數組排列怎麼做

對n個數排序,先輸入n,再輸入n個數。
選擇排序
#include<stdio.h>
int main()
{
int a[100];
int i,j,t,p,n;
while (~scanf("%d",&n))
{
for (i=0;i<n;i++)
scanf("%d",&a[i]);

for (i=0;i<n-1;i++)
{
p=i;
for (j=i+1;j<n;j++)
if (a[p]>a[j])
p=j;

if (p!=j)
{
t=a[p];a[p]=a[i];a[i]=t;
}
}
for (i=0;i<n;i++)
if (i!=n-1)
printf("%d ",a[i]);
else
printf("%d\n",a[i]);

}

return 0;
}

冒泡排序
#include<stdio.h>
int main()
{
int i,j,t,n;int a[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(j=0;j<(n-1);j++)
for(i=0;i<(n-1)-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
for(i=0;i<n;i++)
{
if (i!=n-1)
printf("%d ",a[i]);
else
printf("%d\n",a[i]);
}

return 0;
}

⑷ 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>
#include<time.h>

#defineelemTypeint/*元素類型*/
#defineLEN100/*數組長度上限*/

#defineASC0/*升序*/
#defineDESC1/*降序*/

/*冒泡排序*/
/*參數說明:*/
/*elemTypearr[]:排序目標數組*/
/*intlen:元素個數*/
/*intorder:排序方式;升序(由小到大):ASC;降序(由大到小):DESC*/
voidbubbleSort(elemTypearr[],intlen,intorder){
inti,j,temp;

for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++){
if(order==ASC){/*升序*/
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
elseif(order==DESC){/*降序*/
if(arr[j]<arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}

/*列印數組*/
voidprintArr(elemTypearr[],intlen){
inti;
for(i=0;i<len;i++)
printf("%d ",arr[i]);
putchar(' ');
}

intmain(void){
elemTypearr[LEN]={3,5,1,7,2,9,6,8,10,4};
intlen;

len=10;

puts("初始數組:");
printArr(arr,len);
putchar(' ');

puts("升序排列:");
bubbleSort(arr,len,ASC);/*升序冒泡排序*/
printArr(arr,len);
putchar(' ');

puts("降序排列:");
bubbleSort(arr,len,DESC);/*降序冒泡排序*/
printArr(arr,len);
putchar(' ');

getch();/*屏幕暫留*/
return0;
}

運行結果

⑹ C語言數組排序

這個不是排序,而是逆序輸出,沒學過鏈表用自動增長的棧來實現好了,
只要內存夠大,可以輸入任意個整數:

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

#define INC_SIZE 5 /* 每次棧自動增長的大小 */

/* 棧結構 */
typedef struct INTEGER_STACK
{
int* value;
int size; /* 棧大小 */
int pos; /* 棧頂位置 */
} Stack;

/* 初始化棧 */
void initialize(Stack* s)
{
if (s->size <= 0)
s->size = INC_SIZE;
s->value = (int*)malloc(sizeof(int) * s->size); /* TODO: error check */
s->pos = -1;
}

/* 銷毀 */
void destroy(Stack* s)
{
free(s->value);
s->value = NULL;
s->size = 0;
}

/* 擴充棧 */
void expand(Stack* s, int new_size)
{
if (new_size > s->size)
{
s->value = (int*)realloc(s->value, sizeof(int) * new_size); /* TODO: error check */
s->size = new_size;
}
}

/* 入棧 */
void push(Stack* s, int i)
{
if (s->pos >= s->size - 1)
expand(s, s->size + INC_SIZE);

s->value[++(s->pos)] = i;
}

/* 出棧 */
int* pop(Stack* s)
{
if (s->pos >= 0)
return &(s->value[s->pos--]);
else
return NULL;
}

/* 是否為空棧 */
int is_empty(Stack* s)
{
return s->pos < 0;
}

/* 測試程序 */
int main()
{
Stack stack;

stack.size = 5;
initialize(&stack);

/* 輸入數組 */
printf("輸入整數數組,每行一個整數, 用 end 結束:\n");
while (1)
{
char buf[128];
scanf("%s", buf);

if (strcmp(buf, "end") == 0)
break;
else
push(&stack, atoi(buf));
}

printf("\n");

/* 逆序輸出 */
do
{
int* i = pop(&stack);
if (i == NULL)
break;

printf("%d", *i);
if (!is_empty(&stack))
printf(" ");
}
while (1);

destroy(&stack);

return 0;
}

⑺ 編寫C語言程序,把一個數組按從小到大的次序排列起來

源程序以及演算法注釋如下:

#define _CRT_SECURE_NO_WARNINGS//VS編譯環境需要進行宏定義,VC6.0可忽略

#include<stdio.h>//輸入輸出頭文件

int main()

{

int number[10], New_number[10];//定義數組的數據類型為整型

int i, j, m, n, k;//定義變數的數據類型為整型

printf("input 10 <int> number:");//文字提示

for (i = 0; i <= 9; i++)//用循環輸入數值給數組number並賦給數組New_number

{

scanf("%d", &number[i]);//輸入10個整形數字到數組中

New_number[i] = number[i];//數組number元素賦給數組New_number

}

for (n = 0; n <= 8; n++)//要進行(10-1)組比較

for (j = 0; j <= 8 - n; j++)//每組進行(10減第幾組)次比較

{

if (number[j] > number[j + 1])//比較大小並將小的賦給前面的數組

{

k = number[j];//將相對較大的元素賦值給中間元素

number[j] = number[j + 1];//將相對較小的元素送達前面一個位置

number[j + 1] = k;//將中間變數元素送給後面一個位置

}

if (New_number[j] < New_number[j + 1])//比較大小並將大的賦給前面的數組

{

k = New_number[j + 1];//將相對較小的元素賦值給中間元素

New_number[j + 1] = New_number[j];//將相對較大的元素送達前面一個位置

New_number[j] = k;//將中間變數元素送給後面一個位置

}

}

printf("min-->max: ");//文字提示

for (m = 0; m <= 9; m++)//依次從小到大輸出

printf("%d ", number[m]);//輸出元素

printf(" ");

printf("max-->min: ");//文字提示

for (m = 0; m <= 9; m++)//依次從大到小輸出

printf("%d ", New_number[m]);//輸出元素

printf(" ");

return 0;

}

程序運行結果如下:



(7)數組排序c語言數組擴展閱讀:

其他簡單實現程序:

#include<stdio.h>

int main()

{

int a[10]={0};

int i,j,temp;

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

{

scanf("%d",&a[i]);

}

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

{

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

{

if(a[j]>a[j+1])

{

temp = a[j];

a[j] = a[j+1];

a[j+1] = temp;

}

}

}

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

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

return 0;

}

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

#include <stdio.h>

int main(){

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

int a,b, text, hello;

for(a=0; a<10-1; a=a+1) { //在這里進行比較的開始的代碼

hello = 1; //假如剩下的元素已經被排序好了,然後接著進行下面的比較

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

if(numbers[b] > numbers[b+1]){

text= numbers[b];

numbers[b] = numbers[b+1];

numbers[b+1] = text;

hello= 0;

}

}

if(hello) break;

}

for(a=0; a<10; a=a+1){

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

}

printf(" ");

return 0;

}

(8)數組排序c語言數組擴展閱讀

C語言中數組元素大小的相關排序規則:

一、首先需要對數組中的元素進行排列,默認是以字元串的規則進行從小到大排序;可接收一個參數:自定義的規則相關排序。參數的具體要求如下:

1、參數首先必須是一個函數;

2、函數必須有一個明確的返回值;

3、返回值必須是number類型,但不可以是NaN。

二、排序中的具體規則:

1、首先每次從數組中挑選出兩個元素傳入函數中,進行比較,直到所有進行排列的元素都被挑選完畢以後就不要再進行挑選;

2、如果返回值是一個正數,就交換這彼此的位置,實現大小的正確排列;

3、如果返回值是一個負數或0,此時說明大小位置的順序是正確的,此時就不需要交換彼此的位置。

4、默認同一字元的全形字元看做半形字元。不區分同一個字元(如日文的片假字)的半形與全形狀態。相同元素,維持原序,默認區分字母大小寫,同一個字元小寫在前,大寫在後。

注意:對數組的元素進行排序需要不斷比較兩個數字的大小,10個元素排序一共需要比較9次,直到所有的元素被都完完全全地被比較一次。

熱點內容
linux下載gcc 發布:2024-11-02 14:13:47 瀏覽:344
寫演算法交易 發布:2024-11-02 13:57:09 瀏覽:208
安卓怎麼下載鴻蒙 發布:2024-11-02 13:36:13 瀏覽:663
加密狗rsa 發布:2024-11-02 13:20:44 瀏覽:560
實用java教程 發布:2024-11-02 13:07:39 瀏覽:930
ide文件夾 發布:2024-11-02 12:51:37 瀏覽:559
python中字典的用法 發布:2024-11-02 12:40:42 瀏覽:28
安卓怎麼下載zine 發布:2024-11-02 12:40:38 瀏覽:793
深入理解java虛擬 發布:2024-11-02 12:40:36 瀏覽:557
延吉麻將源碼 發布:2024-11-02 12:39:36 瀏覽:226