A. c語言演算法設計,選擇排序
排序如下:
voidSelectSort(RecordTyper[],intlength)/*對記錄數組r做簡單選擇排序,length為待排序記錄的個數*/
{inttemp;for(i=0;i<length-1;i++)//n-1趟排序{intindex=i;//假設index處對應的數組元素是最小的for(intj=i+1;j<length;j++)//查找最小記錄的位置if(r[j].key<r[index].key)index=j;if(index!=i)//若無序區第一個元素不是無序區中最小元素,則進行交換{temp=r[i];r[i]=r[index];r[index]=temp;}}}
初始序列:{49 27 65 97 76 12 38}第1趟:12與49交換:12{27 65 97 76 49 38}第2趟:27不動:12 27{65 97 76 49 38}第3趟:65與38交換:12 27 38{97 76 49 65}第4趟:97與49交換:12 27 38 49{76 97 65}第5趟:76與65交換:12 27 38 49 65{97 76}第6趟:97與76交換:12 27 38 49 65 76 97 完成
選擇排序法 是對 定位比較交換法(也就是冒泡排序法) 的一種改進。選擇排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。基於此思想的演算法主要有簡單選擇排序、樹型選擇排序和堆排序。
簡單選擇排序的基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。
拓展資料
下面也寫個例子:
由大到小時:
intmain(void){inta[10];inti,j,t,k;for(i=0;i<10;i++)scanf("%d",&a[i]);/*輸入10個數,比武報名,報名費用10000¥^_^*/for(i=0;i<9;i++)/*10個數,所以只需比9次*/{k=i;/*裁判AND記者實時追蹤報道比賽情況*/for(j=i+1;j<10;j++)if(a[k]<a[j])k=j;/*使a[k]始終表示已比較的數中的最大數*/if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}/*t發放獎品*/}for(i=0;i<10;i++)printf("%4d",a[i]);/*顯示排序後的結果*/return0;}
由小到大時:
intmain(void){inta[10];inti,j,t,k;for(i=0;i<10;i++)scanf("%d",&a[i]);/*輸入10個數,比武報名,報名費用10000¥^_^*/for(i=0;i<9;i++){k=i;/*裁判AND記者實時追蹤報道比賽情況*/for(j=i+1;j<10;j++)if(a[k]>a[j])k=j;if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}/*t發放獎品*/}for(i=0;i<=9;i++)printf("%4d",a[i]);/*顯示排序後的結果*/return0;}
B. C語言編程——選擇排序法,要求:由主函數調用排序子函數,對n個整數進行從小到大的排序,謝了
#include <stdio.h>
#define SIZE_N 20 //SIZE_N is the size of the array
void sortFun(int a[], int n)
{
int temp;
for(int i=0;i<n;i++) //進行n個循環,每次選出剩下的最小的數,如第一次選出n個數中最
for(int j=i+1;j<n;j++)//小的那個,如a[8],放入a[0],而將a[0]原來的值放入a[8].第二次
if(a[j]<a[i]) //就從a[1]到a[n-1]中找出最小的數放入a[1],以此類推。
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
void main()
{
int a[SIZE_N];
for(int i=0;i<SIZE_N;i++)
{
scanf("%d",&a[i]); //輸入數據
}
sortFun(a,SIZE_N); //調用排序函數
for(int j=0;j<SIZE_N;j++)
{
printf("%d\n",a[j]); //輸出數據
}
}
以上就是基本的程序,局部可以優化使其更人性化。讀入數據和輸出數據的方式可以考慮用文件的方式,但排序的函數才是關鍵。以上程序調試通過,希望可以幫到你。
C. C語言程序中的選擇法排序是
每次從待序記錄中選出排序碼最小的記錄,順序放在已排好的記錄序的後面,直到全部排完。
直接選擇排序
void selectSort(SortObject * pvector)
{
int i,j,k;
RecordNode temp;
for(i=0;i<pvector->n-1;i++)
{
k=i;
for(j=i+1;j<pvector->n-1;j++)
{
if(pvector->record[j].key>pvector->record[k].key)
k=j;
if(k!=i){
temp=pvector->record[k];
pvector->record[k]=pvector->record[i];
pvector->record[i]=temp;
}
}
}
D. C語言編程:選擇排序(隨便寫個就行)
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4
5 int main(void)
6 {
7 int a[10],i,j,tmp,b;
8 srand(time(NULL));
9 for(i=0;i<10;i++)
10 a[i]=rand()%100;
11 for(i=0;i<10;i++)
12 printf("%3d",a[i]);
13 printf("\n");
14 for(i=0;i<9;i++)
15 {
16 tmp=i;
17 for(j=i+1;j<10;j++)
18 if(a[tmp]>a[j])
19 tmp=j;
20 if(i!=tmp)
21 {
22 b=a[tmp];
23 a[tmp]=a[i];
24 a[i]=b;
25 }
26 }
27 for(i=0;i<10;i++)
28 printf("%3d",a[i]);
29 printf("\n");
30 return 0;
31 }
E. 在c語言中選擇排序法
不加也沒關系,不加的話就多一個a[i]跟a[i]互換
不過好像if(k != i)這個判斷應該是要放到第二個循環外面才是選擇排序。
#include<stdio.h>
#defineN6
intmain()
{
inti,j,k,t,a[N];
puts("InputNNumber:");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
putchar(10);
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N;j++)
{
if(a[k]<a[j])
k=j;
}
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(i=0;i<N;i++)
printf("%3d",a[i]);
putchar(10);
return0;
}
F. c語言 選擇法排序
void sa(int array[],int n)
{
int i,j,k,temp;
for(i=0;i<10;i++)
{
k=i; //保存i的值,用k來進行循環排序
for(j=i+1;j<n;j++) //將第i個元素後面的元素與第i個元素進行比較
if(array[j]<array[k]) //如果第k=i個元素後面的元素小於i號元素,交換兩個元素的標號, 這樣就將最小元素的標號放到最前面
k=j; //交換標號
temp=array[k]; //循環結束後,交換兩個標號下的元素的值
array[k]=array[i];
array[i]=temp;
}
}
這個程序實現的是由小到大的排序。第二個循環裡面,就是i號元素後面最小的元素對應的標號放到k中,在交換當前元素與k號元素中的值,實現由大到小排序
G. C語言:設計選擇排序排序的C語言程序。
選擇法排序
#include <stdio.h>
#define N 10
int main()
{
int array[N];
for(int i=0; i<N; i++)
scanf("%d",&array[i]);
for(i=0; i<N; i++)
for(int j=i+1; j<N; j++)
{
if(array[i]<array[j])
{
int t=array[i];
array[i]=array[j];
array[j]=t;
}
}
for(i=0;i<N;i++)
{printf("%3d",array[i]); }
printf("\n");
return 0;
}
程序2
#include <iostream>
using namespace std;
void main()
{
int i,a[10],k=1,z,j;
cout<<"請任意輸入10個數,進行排序."<<endl;
for(i=0;i<=9;i++)
{
cout<<"請輸入第"<<k++<<"個數字"<<endl;
cin>>a[i];
}
for(i=0;i<=8;i++)
for(j=i+1;j<=9;j++)
if(a[i]<a[j])
{z=a[j];a[j]=a[i];a[i]=z;}
cout<<"從大到小順序為"<<endl;
for(i=0;i<=9;i++)
cout<<a[i]<<' ';
}
H. C語言編程:選擇法排序
選擇排序是一種簡單直觀的排序演算法。
工作原理:
每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。
性能:
選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第一個[5]與[3]交換,導致第一個5挪動到第二個5後面)。
選擇排序的時間復雜度是O(n^2)
思想:
n個記錄的文件的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:
①初始狀態:無序區為R[1..n],有序區為空。
②第1趟排序
在無序區R[1..n]中選出關鍵字最小的記錄R[k],將它與無序區的第1個記錄R[1]交換,使R[1..1]和R[2..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
……
③第i趟排序
第i趟排序開始時,當前有序區和無序區分別為R[1..i-1]和R(i..n)。該趟排序從當前無序區中選出關鍵字最小的記錄 R[k],將它與無序區的第1個記錄R交換,使R[1..i]和R分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。
C語言版代碼:
#include<stdio.h>
#include<math.h>
#defineMAX_SIZE101
#defineSWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))
voidsort(int[],int);/*selectionsort*/
intmain()
{
inti,n;
intlist[MAX_SIZE];
printf(":");
scanf_s("%d",&n);
if(n<1||n>MAX_SIZE){
fprintf(stderr,"Impropervalueofn ");
exit(1);
}
for(i=0;i<n;i++){/*randomlygeneratenumbers*/
list[i]=rand()*1000;
printf("%d",list[i]);
}
sort(list,n);
printf(" Sortedarray: ");
for(i=0;i<n;i++)/*printoutsortednumbers*/
printf("%d",list[i]);
printf(" ");
return0;
}
voidsort(intlist[],intn)
{
inti,j,min,temp;
for(i=0;i<n-1;i++){
min=i;
for(j=i+1;j<n;j++)
if(list[j]<list[min])
min=j;
SWAP(list[i],list[min],temp);
}
}
I. 簡單選擇排序的C語言編程
這題出得實在是夠籠統。
最簡單的,冒泡法排序。
#include<stdio.h>
voidbubble_sort(intary[],intlen){
inti,j,t;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++)
if(ary[j]>ary[j+1]){
t=ary[j];
ary[j]=ary[j+1];
ary[j+1]=t;
}
}
intmain(){
intary[]={22,34,3,32,82,55,89,50,37,5,64,35,9,70};
intlen=(int)sizeof(arr)/sizeof(*arr);
bubble_sort(ary,len);
inti;
for(i=0;i<len;i++)
printf("%d",ary[i]);
return0;
}
這里,你所言及的記錄,可能是一個結構,看你自己的定義修改了。
J. 用C語言編程:用選擇法對10個整數排序,10個整數用scanf函數輸入
1、打開visual C++ 6.0,准備一個空白的c語言文件,引入頭文件,在main函數中定義變數和數組: