⑴ 用c語言對一維數組排序,並輸出已排好元素的原來位置
簡單的思路:
定義一個指針數組,找到b數組中元素在a數組中的地址,並存儲在指針數組對應位置。
之後將指針數組內的地址值依次取出來與a數組首地址相減,得到的就是原來的位置。
利用的原理:數組內地址是連續的!
#include<stdio.h>
intmain()
{
inta[5]={3,8,4,7,6},b[5]={8,7,6,4,3},c[5],i,j,*p[5];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(b[i]==a[j])
p[i]=&a[j];
}
}
for(i=0;i<5;i++)
c[i]=p[i]-&a[0]+1;
printf("原來的位置數組c[5]={%d,%d,%d,%d,%d}
",c[0],c[1],c[2],c[3],c[4]);
}
⑵ C語言數組排序 簡單選擇排序
lz你的輸出函數用錯了,你的列印結果是內存地址,看了你的排序函數沒問題,只要修改下printf函數就ok了,這樣寫printf("%d ",a[i]);
⑶ C語言中怎樣把一個多維數組排序
同意一樓方法,講二維數組存到一維數組中,然後用qsort排序,再存到二維數組當中
代碼敲了一下,發現C語言快忘光了
#include <stdio.h>
#include <stdlib.h>
int comp(const void *a , const void *b){
return *(int *)b - *(int *)a; //這是b-a,如果是a-b就是從小到大排序
}
int main(){
int a[3][3];
int b[9];
int n;
int i , j , k;
for(i = 0 , k = 0; i < 3 ; i ++)
for(j = 0 ; j < 3 ; j ++){
scanf("%d",&a[i][j]);
b[k++] = a[i][j]; // k ++別看漏
}
qsort(b,9,sizeof(int),comp);//qsort函數很簡單的,看看就會,不怕麻煩,comp函數是指定排序是從小到大還是從大到小
for(i = 0 , k = 0; i < 3 ; i ++)
for(j = 0 ; j < 3 ; j ++){
a[i][j] = b[k++];
printf("%d",a[i][j]);
}
system("pause");
return 0;
}
qsort看不懂再給你個網路的鏈接
http://ke..com/view/982231.htm
自己再敲一次吧,代碼是敲出來的,多練練
ps:那個int 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語言編寫函數,數組排序
void Swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void Selectsort(int *arr, int sz)
{for (int end=sz-1; end>=0; end--)
{
int max = end;
int i;
for ( i = 0; i <= end; i++)//選出最大下標
{
if (arr[i] > arr[max])
{
max = i;
}
}
Swap(&arr[end], &arr[max]);
}
}
int main()
{
int arr[5] = { 1, 3, 2, 5, 4 };
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i <= sz - 1; i++)
{
scanf("%d", &arr[i]);
}
Selectsort(arr, sz);
for (int i = 0; i <= sz - 1; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
(5)c語言對數組排序擴展閱讀:
printf函數使用注意事項
1、域寬
%d:按整型數據的實際長度輸出。
如果想輸出指定寬度可以指定域寬,%md-->m域寬,列印出來以後,在控制台上,顯示m位;
如果要列印的數的位數如果超過我們設定m則原樣輸出;
如果要列印的數的位數如果小於設定的位數,則補空白,具體如下:
如果m為正數,則左對齊(左側補空白);
如果m為負數,則右對齊(右側補空白)。
2、轉義字元
如果想輸出字元"%",則應該在「格式控制」字元串中用連續兩個%表示。
如:printf("%f%%",1.0/3);輸出結果:0.333333%。
⑹ c語言對一維數組排序
#include <stdio.h>
int main()
{
int i,j,t,a[11]; //定義變數及數組為基本整型
printf("請輸入10個數:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]); //從鍵盤中輸入10個數
for(i=1;i<10;i++) //變數i代表比較的趟數
for(j=1;j<10-i;j++) //變最j代表每趟兩兩比較的次數
if(a[j]>a[j+1])
{
t=a[j]; //利用中間變數實現兩值互換
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序後的順序是:\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]); //將冒泡排序後的順序輸出
printf("\n");
return 0;
}
⑺ c語言中,用一維數組排序十個整數,怎麼做
需要准備的材料分別有:電腦、C語言編譯器。
1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。
⑻ 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),編程簡單,效率高,但是應付的數據范圍不能太大,受到內存大小的限制)。 平時比較常用的就是快速排序,程序簡單,效率也可以接受。 這是我了解的一些東西,希望對你有幫助。