1. c語言中如何對一組數進行排列
#include "time.h"
#include "stdio.h"
#include "stdlib.h"
int aa[100];
int bb[100];
void main()
{
void ReadDat();//隨機產生100個學生成績存放到數組aa中,隨機產生100個相應的學號存放到bb數組中
void WriteDat();//輸出排序後的成績和相應的學號。
void jsSort();
ReadDat();
printf("*********************************\n");
printf("初始成績單為:\n");
WriteDat();
jsSort();
printf("*********************************\n");
printf("排序後成績單為:\n");
WriteDat();
return ;
}
void ReadDat()
{
srand(time(NULL));//隨機數種子
for(int i=0;i<100;i++)
{
aa[i]=1+(int)(100.0*rand()/(RAND_MAX+1.0));//產生隨機數
}
for(i=0;i<100;i++)
{
bb[i]=1+(int)(100.0*rand()/(RAND_MAX+1.0));//產生隨機數
}
}
void WriteDat()
{
int i;
printf("序號\t成績: \t學號: \n");
for(i=0;i<100;i++)
printf("%d\t成績:%3d\t學號:%d\n",i+1,aa[i],bb[i]);
}
void jsSort()
{
int i,j,t;
for(i=0;i<99;i++)
for(j=0;j<99-i;j++)
{
if(aa[j]<aa[j+1])
{
t=aa[j];///////////冒泡排序,同時調整對應的學號數組bb
aa[j]=aa[j+1];
aa[j+1]=t;
t=bb[j];
bb[j]=bb[j+1];
bb[j+1]=t;
}
}
}
2. 輸入一組整數對該序列進行簡單選擇和歸並排序(數據結構用c語言寫啊)
給你一個歸並排序的具體演算法和分析:
兩路歸並排序演算法思路:
①.
把n個記錄看成n個長度為l的有序子表
;
②.
進行兩兩歸並使記錄關鍵字有序,得到n/2個長度為2的有序子表;
③.
重復第②步直到所有記錄歸並成一個長度為n的有序表為止;
具體演算法:
//
歸並操作
template
static
void
merge
(typearray[],
int
p,
int
q,
int
r){
int
i
,
k
;
int
begin1
,
end1
,
begin2
,
end2
;
int*
temp
=
(int*)malloc((r-p)*sizeof(int))
;
begin1
=
p
;
end1
=
q
;
begin2
=
q+1
;
end2
=
r
;
k
=
0
;
while
(begin1
<=
end1
&&
begin2
<=
end2){
if
(array[begin1]
<
array[begin2]){
temp[k]
=
array[begin1]
;
begin1
++
;
}
else{
temp[k]
=
array[begin2]
;
begin2
++
;
}
k
++
;
}
while
(begin1
<
end1)
temp[k++]
=
array[begin1++]
;
while
(begin2
<
end2)
temp[k++]
=
array[begin2++]
;
for
(i
=
0
;
i
<
(r-p)
;
i
++)
array[p+i]
=
temp
;
free(temp)
;
}
//--------------------------------------------------------------------------------
template
void
mergesort(typearray[],
unsigned
int
first,
unsigned
int
last){
int
mid
=
0
;
if
(first
<
last)
{
mid
=
(first+last)/2
;
mergesort
(array,
first,
mid)
;
mergesort
(array,
mid+1,
last)
;
merge
(array,
first,
mid,
last)
;
}
}
3. c語言編程: 將一組數按從大到小的順序排序
以下是輸入10個整數按從大到小排序後再插入一個整數的程序。
#include <stdio.h>
int main(void)
{
int i,j,temp,sz[50];
for(i=0;i<10;i++)
{
printf(" 請輸入第 %d 個整數:",i+1);
scanf("%d",&sz[i]);
}
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(sz[i]<sz[j])
{
temp=sz[i];
sz[i]=sz[j];
sz[j]=temp;
}
printf(" 10個整數按從大到小排序:");
for(i=0;i<10;i++)
printf(" %d",sz[i]);
printf("
請輸入需要插入的整數:");
scanf("%d",&temp);
j=10;
for(i=9;i>=0;i--)
if(temp>sz[i])
j--;
if(10-j>0)
for(i=9;i>j-1;i--)
sz[i+1]=sz[i];
sz[j]=temp;
printf(" 插入整數 %d 後的數組:",temp);
for(i=0;i<11;i++)
printf(" %d",sz[i]);
return 0;
}
4. C語言 數組與函數 寫一函數,對輸入的一組整數按由小到大的順序排序,在main主函數調用該
#include<stdio.h>
voidbsort(inta[],intn)//a輸入的數組,n是數組長度
{
inti,j,k;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i;j++)
if(a[j]>a[j+1])
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
}
}
intmain()
{
inta[1000],n;
scanf("%d",&n);
inti;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
bsort(a,n);
for(i=0;i<n;i++)
printf("%d",a[i]);
return0;
}
5. C語言 用冒泡排序法將一組整數(存在於數組中)按照從小到大排列
void sort(int a[],int size)
{
int tmp;
int i,j;
for(i=0;i<size;i++)
for(j=0;j<size-i;j++)
{
if(a[j]<a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
6. 編寫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;
}
程序運行結果如下:
(6)一個整數組按順序排列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;
}
7. 用c語言編程:鍵盤上輸入N個整數,使該數組中的數按照從小到大的次序排列(選擇法排序)
#include "stdio.h"
#define N 10
int main(int argc,char *argv[]){
int a[N],i,j,k;
printf("Please enter %d integer(s)... ",N);
for(i=0;i<N;scanf("%d",a+i++));//輸入
for(i=0;i<N;i++){//選擇法排序
for(k=i,j=k+1;j<N;j++)
if(a[k]>a[j])
k=j;
if(k!=i)
j=a[k],a[k]=a[i],a[i]=j;
printf("%d ",a[i]);
}
printf(" ");
return 0;
}
代碼圖片和運行樣例:
8. 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;
}
(8)一個整數組按順序排列c語言擴展閱讀
C語言排序法
把一個數組進行排序可以使用選擇排序法。選擇排序法的原理在是每一趟循環尋找數組中最小的數的下標,然後按照遞增的順序放入數組中。
循環找出最小數的下標,該下標用min保存,直到比較完整個數組,即可找到最小的數,然後將該數放入數組的第一位,這樣就排好了一個元素。
需要再嵌套一層外層循環即可排好所有元素。第二次循環就不用再比較第一個元素了,因為第一個元素已經排好,依次類推,每一次循環就會排好一個,進行n-1次循環即可排好所有元素。
9. C語言,輸入一組數進行排序,由大到小排列,用自定義函數實現
給你一個直接插入排序
#include "stdio.h"
void InsertSort(int a[], int left, int right) {//對數組a從下標為left到right區域進行直接插入排序
int i, j, tmp;
for(i = left + 1; i <= right; i++) {
for(j = i - 1, tmp = a[i]; j >= left && tmp > a[j]; j++)
a[j + 1] = a[j];
a[j + 1] = tmp;
}
}
void main( ) {
int i, n, a[100];
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
InsertSort(a, 0, n - 1);
printf("\n");
for(i = 0; i < n; i++) printf("%d\t", a[i]);
}
10. C語言設計程序輸入一組整數由小到大排序
#include<stdio.h>
#define max 100
void main()
{
int a[max],j,i,k=0,t=0,n=0;
printf("Please input N: "); /*輸入要處理元素的個數*/
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /*比較n-1遍*/
{ k=i;
for(j=i+1;j<n;j++) /*每遍比較n-(i+1)次*/
if(a[k]>a[j])
k=j;
if(k!=i) /*元素排序前下標與排序後下標不符,則交換其值*/
{ t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("\n\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
}