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

數組排序c語言數組排序方法

發布時間: 2022-10-29 21:33:52

1. 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;
}

2. C語言:用選擇排序法對一個數組里的數進行排序,從小到大,要求選出小的進行排序

#include<stdio.h>

intmain()

{

inti=0;

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

intj=0;

inttmp=0;

intm=sizeof(a)/sizeof(a[0]);//s數組大小

for(i=0;i<m-1;i++)//比較m-1次

{

for(j=0;j<m-i-1;j++)//最後一次比較a[m-i-1]與a[m-i-2]

{

if(a[j]>a[j+1])//如果a[j]比a[j+1]大則交換內容

{

tmp=a[j+1];

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

a[j]=tmp;

}

}

}

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

{

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

}

printf(" ");

return0;

}

(2)數組排序c語言數組排序方法擴展閱讀

C語言排序法

把一個數組進行排序可以使用選擇排序法。選擇排序法的原理在是每一趟循環尋找數組中最小的數的下標,然後按照遞增的順序放入數組中。

循環找出最小數的下標,該下標用min保存,直到比較完整個數組,即可找到最小的數,然後將該數放入數組的第一位,這樣就排好了一個元素。

需要再嵌套一層外層循環即可排好所有元素。第二次循環就不用再比較第一個元素了,因為第一個元素已經排好,依次類推,每一次循環就會排好一個,進行n-1次循環即可排好所有元素。

3. C語言,數組數據升序排列

#include <stdio.h>
#include <malloc.h>
int main()
{
int *p=NULL,n=0;
int i,j,temp;
printf("請輸入數組大小!\n");
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);
if(p==NULL)
{
printf("內存不足分配失敗!\n");
return 0;
}
printf("請為%d個元素賦值如 1 2 3\n",n);
for(i=0;i<n;++i)
scanf("%d",p+i);
for(i=1;i<n;++i)
{
for(j=0;j<n-i;++j)
if(p[j]>p[j+1])
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}

}
printf("排序結果!\n");
for(i=0;i<n;++i)
printf("%5d",p[i]);
printf("\n");
return 0;
}

4. C語言sort函數如何使用

C語言中沒有預置的sort函數。如果在C語言中,遇到有調用sort函數,就是自定義的一個函數,功能一般用於排序。

一、可以編寫自己的sort函數。

如下函數為將整型數組從小到大排序。

voidsort(int*a,intl)//a為數組地址,l為數組長度。

{

inti,j;

intv;

//排序主體

for(i=0;i<l-1;i++)

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

{

if(a[i]>a[j])//如前面的比後面的大,則交換。

{

v=a[i];

a[i]=a[j];

a[j]=v;

}

}}

對於這樣的自定義sort函數,可以按照定義的規范來調用。

二、C語言有自有的qsort函數。

功 能: 使用快速排序常式進行排序

頭文件:stdlib.h

原型: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

參數:

1 待排序數組首地址

2 數組中待排序元素數量

3 各元素的佔用空間大小

4 指向函數的指針,用於確定排序的順序

這個函數必須要自己寫比較函數,即使要排序的元素是int,float一類的C語言基礎類型。

以下是qsort的一個例子:

#include<stdio.h>

#include<stdlib.h>

intcomp(constvoid*a,constvoid*b)//用來做比較的函數。

{

return*(int*)a-*(int*)b;

}

intmain()

{

inta[10]={2,4,1,5,5,3,7,4,1,5};//亂序的數組。

inti;

qsort(a,n,sizeof(int),comp);//調用qsort排序

for(i=0;i<10;i++)//輸出排序後的數組

{

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

}

return0;

}

(4)數組排序c語言數組排序方法擴展閱讀:

sort函數的用法(C++排序庫函數的調用)

對數組進行排序,在c++中有庫函數幫我們實現,這們就不需要我們自己來編程進行排序了。

(一)為什麼要用c++標准庫里的排序函數

Sort()函數是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的冒泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間復雜度為n*log2(n),執行效率較高!

(二)c++標准庫里的排序函數的使用方法

I)Sort函數包含在頭文件為#include<algorithm>的c++標准庫中,調用標准庫里的排序方法可以不必知道其內部是如何實現的,只要出現我們想要的結果即可!

II)Sort函數有三個參數:

(1)第一個是要排序的數組的起始地址。

(2)第二個是結束的地址(最後一位要排序的地址的下一地址)

(3)第三個參數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個參數,此時默認的排序方法是從小到大排序。

Sort函數使用模板:

Sort(start,end,排序方法)

下面就具體使用sort()函數結合對數組里的十個數進行排序做一個說明!

例一:sort函數沒有第三個參數,實現的是從小到大

#include<iostream>

#include<algorithm>

using namespace std;

int main()

{

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

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

cout<<a[i]<<endl;

sort(a,a+11);

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

cout<<a[i]<<endl;

return 0;

}

編譯

GCC,GNU組織開發的開源免費的編譯器

MinGW,Windows操作系統下的GCC

Clang,開源的BSD協議的基於LLVM的編譯器

Visual C++:: cl.exe,Microsoft VC++自帶的編譯器

集成開發環境

CodeBlocks,開源免費的C/C++ IDE

CodeLite,開源、跨平台的C/C++集成開發環境

Orwell Dev-C++,可移植的C/C++IDE

C-Free

Light Table

Visual Studio系列

Hello World

5. 用C語言怎麼對數組元素進行排序,急!!求高手解答

#include
"stdio.h"
void
reverse(int
a[],int
pos,int
n)//把數組a中從下標pos開始的n個數逆置
{
int
*p=a+pos;
int
*q=a+pos+n-1;
while(p<q)
{
int
temp=*p;
*p=*q;;
*q=temp;
p++;q--;
}
}
void
main()
{
int
a[10]={1,2,3,4,5,6,7,8,9,10};
int
pos,n;
int
i;
scanf("%d%d",&pos,&n);
reverse(a,pos,n);
for(i=0;i<10;i++)
printf("%d
",a[i]);
}

6. C語言中怎麼對數組隨機排序

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

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

7. 編寫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;

}

8. 求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;

}

(8)數組排序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;

}

9. c語言三種排序

常用的c語言排序演算法主要有三種即冒泡法排序、選擇法排序、插入法排序

一、冒泡排序冒泡排序:

是從第一個數開始,依次往後比較,在滿足判斷條件下進行交換。代碼實現(以降序排序為例)

#include<stdio.h>

int main()

{

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

int temp;

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

{//循環次數

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

{

if (array[j] < array[j+1])

{//前面一個數比後面的數大時發生交換 temp = array[j];

array[j] = array[j+1];

array[j + 1] = temp;

}

}

} //列印數組 for (int i = 0; i < 10; i++) printf("%2d", array[i]); return 0;}}

二、選擇排序以升序排序為例:

就是在指定下標的數組元素往後(指定下標的元素往往是從第一個元素開始,然後依次往後),找出除指定下標元素外的值與指定元素進行對比,滿足條件就進行交換。與冒泡排序的區別可以理解為冒泡排序是相鄰的兩個值對比,而選擇排序是遍歷數組,找出數組元素與指定的數組元素進行對比。(以升序為例)

#include<stdio.h>

int main()

{

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

int temp, index;

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

index = i;

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

{

if (array[j] < array[index])

index = j;

}

if(i != index)

{

temp = array[i];

array[i] = array[index];

array[index] = temp;

}

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

printf("%2d"array[i])

return 0;

}

三、快速排序

是通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

void QuickSort(int* arr, int size)

{

int temp, i, j;

for(i = 1; i <size; i++)

for(j=i; j>0; j--)

{

if(arr[j] <arr[j-1])

{

temp = arr[j];

arr[j]=arr[j-1];

arr[j-1]=temp;

}

}

}

熱點內容
c語言編譯過程講解 發布:2025-01-06 05:52:42 瀏覽:693
安卓的光遇怎麼華麗退場 發布:2025-01-06 05:50:27 瀏覽:680
騰訊雲輕量伺服器設置獨立ip 發布:2025-01-06 05:50:26 瀏覽:722
伺服器的主機地址 發布:2025-01-06 05:47:38 瀏覽:869
為什麼安卓系統最近越來越多更新 發布:2025-01-06 05:47:30 瀏覽:956
如何用cmd打開伺服器管理器 發布:2025-01-06 05:44:40 瀏覽:436
我的世界國際服一進伺服器就崩 發布:2025-01-06 05:30:53 瀏覽:395
雲主機網站源碼 發布:2025-01-06 05:30:40 瀏覽:88
整數指數冪的運演算法則 發布:2025-01-06 05:22:32 瀏覽:362
php數據緩存技術 發布:2025-01-06 05:22:24 瀏覽:516