選擇排序代碼
public class PaiXu {
/**
* @param args
*/
/**
* 冒泡降序
*
* @param a
* @return
*/
public static int[] maoPao(int a[]) {
int c = 0;
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] < a[j + 1]) {
c = a[j];
a[j] = a[j + 1];
a[j + 1] = c;
}
}
}
return a;
}
/**
* 冒泡升序
* @param a
* @return
*/
public static int[] maoPaoShenXu(int a[]){
int c = 0;
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] >a[j + 1]) {
c = a[j];
a[j] = a[j + 1];
a[j + 1] = c;
}
}
}
return a;
}
/**
* 選擇降序
*/
public static int[] xuanZe(int a[]) {
for (int i = 0; i < a.length - 1; i++) {
int min = i;
for (int j = i + 1; j < a.length; j++) {
if (a[min] < a[j]) {
min = j;
}
}
if (min != i) {
int tem = a[min];
a[min] = a[i];
a[i] = tem;
}
}
return a;
}
/**
* 插入排序 降序
*
* @param a
* @return
*/
public static int[] chaRu(int a[]) {
for (int i = 1; i < a.length; i++) {
if (a[i] > a[i - 1]) {
int tem = a[i];
int j = i;
for (; j > 0; j--) {
if (tem > a[j - 1]) {
a[j] = a[j - 1];
} else {
break;
}
}
a[j] = tem;
}
}
return a;
}
/**
* 顯示數組的數目
*
* @param a
*/
public static void show(int a[]) {
for (int b : a) {
System.out.println(b);
}
}
/**
* 二分查找數組 只能查找降序數組
*/
public static void erFenChaZhao(int num, int a[]) {
int head = 0;
int trail = a.length - 1;
int middle = 0;
boolean flag = true;
while (trail >= head) {
middle = (trail + head) / 2;
if (num == a[middle]) {
System.out.println("找到了,位置是第" + (middle + 1) + "個");
flag = false;
break;
} else if (num < a[middle]) {
head = middle + 1;
} else {
trail = middle - 1;
}
}
if (flag) {
System.out.println("沒有這個數");
}
}
/**
* 順序查找
*/
public static void shunXuChaoZhao(int num, int a[]) {
for (int i = 0; i < a.length; i++) {
if (num == a[i]) {
System.out.println("找到了,它是當前數組的第" + (i + 1) + "個");
}
}
}
}
//以前寫的一個工具類
❷ c語言選擇排序,程序
不說原理了,直接上代碼:
typedefintDT;
staticvoidswap(DT*a,DT*b){
if(a!=b){
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
}
}
voidselect(DTfrom[],intlen,int(*cmp)(DT,DT)){
inti,j;
for(i=0;i<len;++i){
DTt=from[0];
intk=0;
for(j=1;j<len-i;++j){
if(cmp(t,from[j])==-1){
t=from[j];
k=j;
}
}
swap(from+len-1-i,from+k);
}
}
❸ C語言選擇排序法
這是選擇排序。先用a[0]與a[1]比較,當a[0]<a[1]時並不交換,而用k記下來現在a[0]最小……這樣一趟比較完後a[k]就是整個數組中最小的元素,把它與a[0]交換;第二趟,從a[1]開始重復前面的操作,那麼最後a[1]就是剩下的n-1個元素中最小的……看a[0]、a[1]已經由小到大排好了,當做完n-1趟時不就把整個數組都排好了嗎?注意:t=array[k];array[k]=array[i];array[i]=t;不是for(j=i+1;j<n;j++)的循環體,要等它循環完了後才執行一次。
❹ 什麼是c語言裡面的選擇排序演算法
選擇法排序是一種簡單的容易實現的對數據排序的演算法。
以整形數組元素為例,有數組A[10],即A[0],A[1],…,A[8],A[9](假設其元素均互不相同)。要求對其元素排序使之遞增有序。
首先以一個元素為基準,從一個方向開始掃描,比如從左至右掃描,以A[0]為基準。 接下來從A[0],…,A[9]中找出最小的元素,將其與A[0]交換。 然後將基準位置右移一位,重復上面的動作,比如,以A[1]為基準,找出A[1]~A[9]中最小的,將其與A[1]交換。 一直進行到基準位置移到數組最後一個元素時排序結束(此時基準左邊所有元素均遞增有序,而基準為最後一個元素,故完成排序
寫成獨立函數如下:
void selectionsort(int *array,int n) //array為存儲數據的數組,n為數組元素個數
{
int k,temp; //k用來存儲,臨時最小數據的位置
for(int i=0;i<n-1;i++)
{
k=i;
for(int j=i+1;j<n;j++) //從第i個數開始選擇最小數位置,存於k中
if(array[j]<array[k])
k=j;
if(k!=i) //若最小數,不為array[i],則array[i]與array[k]進行交換
{
temp=array[i];
array[i]=array[k];
array[k]=temp;
}
}
}
演算法平均時間復雜度: O(n^2)
❺ C# 選擇排序 代碼
你的選擇排序的程序,我幫你改完了,你看看吧(改動的地方見注釋)
usingSystem;
namespaceSortApplication{
classSortProgram{
staticvoidMain(string[]args){
intN=10,min,temp;//這里定義臨時變數和最小元素下標變數
int[]a=newint[N];varr=newRandom();
Console.Write("原有數列順序:");
for(inti=0;i<N;i++)
{
a[i]=r.Next(0,30);
Console.Write(a[i]+"");
}
Console.WriteLine("");
Console.Write("選擇排序後數列順序:");
for(inti=0;i<N-1;i++)//每次循環數組,找出最小的元素,放在前面,前面的即為排序好的
{
min=i;//假設最小元素的下標
for(intj=i+1;j<N;j++)//將上面假設的最小元素與數組比較,交換出最小的元素的下標
if(a[j]<a[min])
min=j;
//若數組中真的有比假設的元素還小,就交換
if(i!=min)
{
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
Console.Write(a[i]+"");
}
Console.ReadKey();
}
}
}
❻ 選擇排序法代碼問題
這是因為score沒有分配內存空間,導致在輸入的時候,就會出現內存空指針問題。
解決方法:
int *score 改成int score[10],10是數組的大小,必須大於要輸入數據的個數。
另外把
scanf("%d",score[i]);
改成
scanf("%d",&score[i]);
❼ 寫出選擇排序的程序
#include<stdio.h>
int main()
{
void sort(int array[],int n);
int a[10],i;
printf("enter 10 number: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted array: ");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf(" ");
return 0;
}
void sort(int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}
❽ c語言選擇排序的程序代碼
是數字排序么?
數字排序:
# include<stdio.h>
# include<stdlib.h>
int mycomp(const void *p1,const void *p2){
const int *a1=(const int*)p1;
const int *a2=(const int*)p2;
if(*a1<*a2)
return -1;
if(*a1==*a2)
return 0;
else
return 1;
}
main(){
int a[20]={5,7,9,6,5,8,4,5,2,3,1,8,6,9,7,0,5,4,5,6};
qsort(a,20,sizeof(int),mycomp);
for(int i=0;i<20;i++)
printf("%d",a[i]);
}
❾ C語言選擇法排序
#include<stdio.h>
#defineM 5
void main()
{
int b[M],i,j,t,k;
for(i=0;i<M;i++)
scanf("%d",&b[i]);
for(i=0;i<M-1;i++)
{
for(k=i,j=i+1;j<M;j++)
if(b[k]<b[j])
k=j;
if(i!=k)
{
t=b[i];
b[i]=b[k];
b[k]=t;
}
}
for(i=0;i<M;i++)
printf("%d ",b[i]);
}
錯在大括弧位置加錯了。
代碼:
#include<stdio.h>
void SelectionSort(int *num,int n)
{
int i = 0;
int min = 0;
int j = 0;
int tmp = 0;
for(i = 0;i < n-1;i++)
{
min = i;//每次講min置成無序組起始位置元素下標
for(j = i;j < n;j++)//遍歷無序組,找到最小元素。
{
if(num[min]>num[j])
{
min = j;
}
}
if(min != i)//如果最小元素不是無序組起始位置元素,則與起始元素交換位置
{
tmp = num[min];
num[min] = num[i];
num[i] = tmp;
}
}
}
(此處空一行)
int main()
{
int num[6] = {5,4,3,2,9,1};
int i = 0;
SelectionSort(num,6);//這里需要將數列元素個數傳入。有心者可用sizeof在函數內求得元素個數。
for(i = 0;i < 6;i++)
{
printf("%d ",num[i]);
}
return 0;
}
❿ 求 c語言選擇排序法和 冒泡排序法代碼
冒泡排序法的具體實現方法是這樣的,從數組的第一個元素`arr[0]`開始,兩兩比較**(`arr[n],arr[n+1]`),如果前面的數大於後面的數(`arr[n] > arr[n+1]`),那麼交換兩個元素的位置,把大的數往後移動。這樣依次經過一輪比較以後,最大的數將會被交換到最後的位置(arr[n-1])。
C語言實現Bubblesort:
voidbubblesort(inta[],intm)
{
inti,j;
inttmp;
intflag=0;//設定標志,如果第一次循環比較時沒有發生交換,則說明數組是升序排序,不用排序,提前結束循環。
for(i=0;i<m;i++)//外層循環控制循環次數
{
for(j=0;j<m-1-i;j++)//內層循環控制每次循環里比較的次數。
{
if(a[j]>a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
flag=1;
}
}
if(0==flag)
{
printf("NoSort ");
break;
}
}
}
選擇排序法的過程是,通**過比較,選擇出每一輪中最值元素,然後把他和這一輪中最最前面的元素交換**,所以這個演算法關鍵是要記錄每次比較的結果,即每次比較後最值位置(下標)。
C語言實現(Selectionsort)
voidselectionsort(inta[],intm)
{
inti,j;
intk;
inttmp;
for(i=0;i<m-1;i++)//控制循環次數,n個數需要n-1次循環
{
k=i;
for(j=i+1;j<m;j++)
{
if(a[j]<a[k])
k=j;
}
//i不等於k是就證明a[i]不是最小的,
//i等於k時證明a[i]就是本輪比較過程中最小的值
if(i!=k)
{
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
}